我是JavaScript的新手,我在局部和全局变量作用域上做过一些实践。以下是我的代码(fiddle):
var myname = "initial"
function c(){
alert(myname);
var myname = "changed";
alert(myname);
}
c();
当第一个警报被调用时,它将myname
显示为未定义。所以我的困惑是为什么我不能访问myname
的全局实例,如果我没有在函数中定义myname
,那么它就会工作得很好。
发布于 2013-11-01 13:31:45
在JavaScript中,变量声明会自动移到函数的顶部。因此,解释器会让它看起来更像这样:
var myname = "initial"
function c(){
var myname;
// Alerts undefined
alert(myname);
myname = "changed";
// Alerts changed
alert(myname);
}
c();
这称为hoisting。
由于提升和任何变量的作用域都是在其中声明它的函数的事实,标准做法是在函数的顶部列出所有变量以避免这种混淆。
发布于 2013-11-01 13:29:10
它不会替换全局变量。正在发生的情况被称为“变量提升”。也就是说,var myname;
被插入到函数的顶部。在使用变量之前,一定要对它们进行初始化。
试试这个:
var myname = "initial";
function c() {
alert(myname);
myname = "changed";
alert(myname);
}
c();
https://stackoverflow.com/questions/19721313
复制相似问题