执行时
var a=b=c=d=e=f=a;
//no error(a has not initialize before)
var x=y;
//ReferenceError: y is not defined
第一个代码怎么能像a
之前已经被初始化一样执行。
执行时
var a=b=c=d=e=f=a;
//no error(a has not initialize before)
var x=y;
//ReferenceError: y is not defined
第一个代码怎么能像a
之前已经被初始化一样执行。
这是因为可变提升。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;
请注意, onlya
是使用声明的var
- 所以你正在创建大量的全局变量,这总是一件坏事!
你的第一句话就像
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
尚未定义