Javascript本地和全局variables混淆
我是JavaScript新手,我在本地和全局variables作用域上做了一些练习,下面是我的代码( 小提琴 ):
var myname = "initial" function c(){ alert(myname); var myname = "changed"; alert(myname); } c();
当第一个警报被调用时,它显示myname
为未定义的。 所以我的困惑是为什么我无法访问myname
的全局实例,如果我没有在函数中定义myname
,那么它将正常工作。
在Javascript中,variables声明自动移动到函数的顶部。 所以,翻译会使它看起来更像这样:
var myname = "initial" function c(){ var myname; // alerts undefined alert(myname); myname = "changed"; // alerts changed alert(myname); } c();
这就是所谓的“提升”。
由于提升以及任何variables的作用域是它所声明的函数的事实,所以标准做法是在函数顶部列出所有variables以避免混淆。
它不是取代全局variables。 正在发生的事情被称为“variables提升”。 那就是myname var myname; 被插入到函数的顶部。 在使用它们之前总是初始化你的variables
尝试这个
var myname = "initial" function c(){ alert(myname); myname = "changed"; alert(myname); } c();
小提琴是