在理想情況下,你只是在該範圍內的頂級聲明變量,像這樣:
var foo, bar, obj, domNode;
所有這些變量會undefined
,如其價值是undefined
。如果你知道一個事實,這些變量中的一個將被用作在一個循環的字符串,例如,而吳丹寫作foo = (foo === undefined ? '' : foo) + 'add this';
,只寫:
var foo = '', bar, obj, domNode;
如果你打算使用obj
var當成對象文字,只需在時間到時將其分配{my: 'objec', vals: 'here'}
,或將其初始化爲{}
,並添加屬性obj.as = 'you'; obj[foo] = 'go';
。如果您要分配DOM元素的引用,請將其保存爲undefined
,因爲任何分配都會產生無謂的開銷。
同樣適用於任何類型的引用(函數對象,數組,對象...)。只需推遲分配,因爲它只會覆蓋以前的任務。
至於數字,undefined + 123
將得到評估爲NaN
,所以在這種情況下,初始化爲0
是有道理的。然而,在循環計數器的情況:
var foo, i, obj, arr = [1,2,3];
for (i=0;i<arr.length;i++)
{
console.log(arr[i]);
}
等同於:
var foo, i= 0, arr = [1,2,3];
for (;i<arr.length;i++)
{
console.log(arr[i]);
}
只有後者看起來幾乎大肆複雜。只要用你的常識,你就會好起來的。
只知道變量聲明提升到範圍的頂部,但分配是不是:因爲它翻譯成
console.log(foo);//undefined
var foo = 123;
console.log(foo);//123
:
var foo;
console.log(foo);
foo = 123;
console.log(foo);
那麼,爲什麼不寫你的代碼它會被引擎解釋?
謝謝。我總是使用這種表示法,可能會繼續使用 –