JavaScript局部变量和全局变量混淆

JavaScript local and global variable confusion

本文关键字:全局变量 局部变量 JavaScript      更新时间:2023-09-26

我是 JavaScript 的新手,我正在对局部和全局变量范围进行一些练习。以下是我的代码(小提琴):

var myname = "initial"
function c(){
    alert(myname);
    var myname = "changed";
    alert(myname);
}
c();

调用第一个警报时,它将myname显示为未定义。所以我的困惑是为什么我无法访问myname的全局实例,如果我不在函数中定义myname,那么它将正常工作。

在 JavaScript 中,变量声明会自动移动到函数的顶部。因此,解释器会使其看起来更像这样:

var myname = "initial"
function c(){
    var myname;
    // Alerts undefined
    alert(myname);
    myname = "changed";
    // Alerts changed
    alert(myname);
}
c();

这称为吊装。

由于提升以及任何变量的作用域都是声明它的函数这一事实,标准做法是在函数顶部列出所有变量以避免这种混淆。

它不会替换全局变量。正在发生的事情被称为"可变吊装"。也就是说,var myname;入到函数的顶部。在使用变量之前,请始终对其进行初始化。

试试这个:

var myname = "initial";
function c() {
    alert(myname);
    myname = "changed";
    alert(myname);
}
c();