12

执行时

var a=b=c=d=e=f=a; 
//no error(a has not initialize before)

var x=y;
//ReferenceError: y is not defined

第一个代码怎么能像a之前已经被初始化一样执行。

4

2 回答 2

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;

请注意, onlya是使用声明的var- 所以你正在创建大量的全局变量,这总是一件坏事

于 2013-07-08T07:04:13.050 回答
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=yy尚未定义

于 2013-07-08T07:33:40.703 回答