执行
var a=b=c=d=e=f=a;
//no error(a has not initialize before)
var x=y;
//ReferenceError: y is not defined
第一个代码如何才能执行,就好像a
之前已经初始化一样。
答案 0 :(得分:11)
这是因为可变吊装。 var x = EXPR;
实际上已转换为:
// beginning of the block (function/file)
var x; // === undefined
// ...
// the actual position of the statement
x = EXPR
对于您的示例,这意味着:
var a; // === undefined
a = b = c = d = e = f = a;
请注意,只有a
使用var
声明 - 所以你要创建大量的全局变量总是坏事!
答案 1 :(得分:5)
您的第一个陈述就像是
var a = undefined;
a = window.b = window.c = window.d = window.e = window.f = a;
其中a是已定义的,而其他是全局范围的。假设您执行了一个函数。
(function(){
var a=b=c=d=e=f=a;
b = 10;
}());
b
可以在外面访问。
在第二个var x=y
中,y
尚未定义