Javascript - 全局范围内的全局变量和变量是否不同(在jsfiddle中)?

时间:2015-01-01 12:49:32

标签: javascript scope global-variables global jsfiddle

全局范围内的全局变量和变量是否不同?请参阅下面的代码或JSfiddle实现 - http://jsfiddle.net/2ngj9rqa/

a = 10;
var b = 20;

function x() {
a = 20;
}

alert(window.a);
alert(window.b);

2 个答案:

答案 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);