上執行分配變量名相同的變量名
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