理想的なシナリオでは、次のようにスコープの先頭で変数を宣言するだけです。
var foo, bar, obj, domNode;
これらの変数はすべて、値がundefined
であるため、 になります。たとえば、これらの変数の 1 つがループ内の文字列として使用されることがわかっている場合は、 を記述するのではなく、次のように記述します。undefined
foo = (foo === undefined ? '' : foo) + 'add this';
var foo = '', bar, obj, domNode;
obj
var をオブジェクト リテラルとして使用する{my: 'objec', vals: 'here'}
場合は、必要なときに割り当てるか、初期化して{}
properties を追加します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);
では、エンジンによって解釈されるようにコードを記述してみませんか?