全局变量和全局范围内的变量不同吗?请参阅下面的代码或 JSfiddle 实现 - http://jsfiddle.net/2ngj9rqa/。
a = 10;
var b = 20;
function x() {
a = 20;
}
alert(window.a);
alert(window.b);
JSFiddle中的一个技巧,b
被包装在onload
中,但不是window
如果你选择no wrap
,那就好了。在 plunker 中也尝试相同的方法就可以了。
您编写的代码在所有主流浏览器中都可以正常工作。它不起作用,因为它是由 jsfiddle 中的加载包装的。a和b在这里都是全局变量,它们都在全局范围内。您可以从代码中的任何位置访问它们,除非您在函数自己的作用域中引入具有相同名称的变量。有一种叫做变量范围和提升的东西。当您声明变量或为其赋值(当然使用 var 关键字)时,所有变量(隐式全局变量除外)都提升在其范围的顶部.了解有关变量和函数提升的更多信息因此,您的代码等效于以下内容:
var b;
a = 10;
b = 20;
function x() {
a = 20;
}
alert(window.a);
alert(window.b);