全局范围内的全局变量和变量是否不同?请参阅下面的代码或JSfiddle实现 - http://jsfiddle.net/2ngj9rqa/。
a = 10;
var b = 20;
function x() {
a = 20;
}
alert(window.a);
alert(window.b);
答案 0 :(得分:2)
这是JSFiddle中的一个技巧,b
包含在onload
中但不包含在window
中
如果你选择no wrap
,那很好。也可以在plunker中尝试相同的方法。
答案 1 :(得分:1)
你编写的代码在所有主流浏览器中都能正常工作。它不会工作,因为它被jsfiddle中的onload包装。这里a和b都是全局变量,它们都在全局范围内。您可以从代码中的任何位置访问它们,除非您在函数自己的范围内引入了一个具有相同名称的变量。这里有一个名为变量作用域和提升的东西。所有变量(隐式全局除外)都悬挂在其作用域的顶部声明一个变量或赋值给它( with var keyword ofcourse )。know more on variable and function hoisting所以,你的代码等同于:
var b;
a = 10;
b = 20;
function x() {
a = 20;
}
alert(window.a);
alert(window.b);