Jér*_*nge 6 javascript scope global-variables
我遇到了Javascript的一个奇怪的范围问题(参见JSFiddle):
var someGlobal = 3;
function someF() {
// undefined issue
alert(someGlobal);
var someGlobal = 5;
// Displays 5
alert(someGlobal);
}
function someF2() {
// Displays 3, why?
alert(someGlobal);
}
someF();
someF2();
Run Code Online (Sandbox Code Playgroud)
为什么Javascript不引发未定义的问题someF2()?怎么来someF2()访问someGlobal,而someF()不是?如何确保函数中可以访问全局变量?
备注:
在这两种情况下,函数都是通过调用开始的alert(someglobal),为什么一个函数抛出一个未定义的问题而另一个函数没有?
someF创建一个名为someGlobal(掩盖全局someGlobal)的新(本地作用域)变量并为其赋值.它不会触及全局someGlobal(虽然无法访问它,因为在范围内有另一个具有相同名称的变量).
var声明悬挂,所以someGlobal被屏蔽了所有的someF(不仅仅是后var声明).当地的值someGlobal是undefined直到值分配给它.
someF2访问原始(未触及)全局someGlobal.
| 归档时间: |
|
| 查看次数: |
2346 次 |
| 最近记录: |