上执行分配变量名相同的变量名
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
对于你的榜样,这意味着:只有a
使用var
声明
var a; // === undefined
a = b = c = d = e = f = a;
注 - 让你创建吨全局的是总是一件坏事!
所以,如果删除了''在表达式的末尾,这将导致一个错误,但如果不是,它会创建全局和分配的'了'价值,所有的变量? – Givi
是的,这是正确的。如果删除最后一个'a',则不存在的'f'将被读取并导致异常,因为它不存在。 – ThiefMaster
你的第一条语句就像
var a = undefined;
a = window.b = window.c = window.d = window.e = window.f = a;
其中定义,和其他人是全球范围的。假设你执行一个函数。
(function(){
var a=b=c=d=e=f=a;
b = 10;
}());
b
可以在外面访问。
在第二var x=y
,y
还没有定义
小幅调整:访问全球'x'不太一样访问'window.x':'window.x'永远不会失败,但如果''x'完全不存在x'失败。 – ThiefMaster
第一条语句是像'VAR一个=未定义; window.b = window.c = window.d = window.e = window.f = a;'第二个'y没有定义' – rab
@rab只是发布那个答案。这是正确的 – rossipedia