在理想情况下,你只是在该范围内的顶级声明变量,像这样:
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);
那么,为什么不写你的代码它会被引擎解释?
谢谢。我总是使用这种表示法,可能会继续使用 –