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(); 

小提琴是

http://jsfiddle.net/xjmBf/2/