Javascript本地和全局变量混淆

时间:2013-11-01 05:27:10

标签: javascript

我是JavaScript的新手,我在本地和全局变量范围上做了一些练习,以下是我的代码(fiddle):

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

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

2 个答案:

答案 0 :(得分:45)

在Javascript中,变量声明会自动移动到函数的顶部。所以,解释器会让它看起来更像这样:

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

这称为'吊装'。

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

答案 1 :(得分:7)

它不是替换全局变量。发生的事情被称为“可变吊装”。也就是说,var myname;被插入函数的顶部。始终在使用变量之前初始化变量 - 试试这个:

var myname = "initial";

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

c();

相关问题