Why my global variable is not accessible within a function?
本问题已经有最佳答案,请猛点这里访问。
我认为
1 2 3 4 5 6 7 | var myColor ="blue"; function sayColor() { alert(myColor); //undefined expected blue var myColor ="green"; alert(myColor); //green } sayColor(); |
这里发生的事情被称为"吊装"。使用
1 2 3 4 5 6 7 8 | var myColor ="blue"; function sayColor() { var myColor; alert(myColor); //undefined expected blue myColor ="green"; alert(myColor); //green } sayColor(); |
来自MDN:
Every definition of a variable is really a declaration of the variable at the top of its scope and an assignment at the place where the definition is.
您正在使用同名的局部变量隐藏全局变量
1 2 3 4 5 6 7 | var myColor ="blue"; function sayColor() { alert(myColor); myColor ="green"; // Omit the"var" keyword. alert(myColor); } sayColor(); |
Javascript只有函数作用域,函数中声明的所有变量都被提升到顶部,因此它们在整个函数中都可用。 OP原始版本中的第一个警报是使用未初始化的,提升的局部变量,这就是它打印
因为你再次宣布它。
1 | var myColor ="green"; |
在JavaScript中,在解释器执行函数之前,它会扫描整个函数以获取
您正在再次在函数内设置变量。浏览器在分配之前读取函数,这会导致未定义的结果。
这是正确的。
1 2 3 4 5 6 7 | var myColor ="blue"; function sayColor() { alert(myColor); //undefined expected blue myColor ="green"; alert(myColor); //green } sayColor(); |