ローカルvar
ステートメントが引数に置き換えられるような関数を作成すると、パフォーマンスが低下しますか? 例:
function howManyMatch(arr, pattern, /*ignored:*/ i, l, total) {
l = arr.length;
total = 0;
for (i = 0, i < l; i++) {
if (pattern.test(arr[i]))
total++;
return total;
}
いくつかの利点:
- 小さい縮小サイズ:
var
ステートメントなし。 var
できるだけ少ない s を使おうとするプログラマーの時間が減る- 1 か所で定義されたすべてのローカル変数
...そして欠点:
arguments
思いがけない方法で変更される可能性があります。下記参照- vars がローカルであるという本体の明確性が低い
- 何もしない引数を見ると混乱する
- 誰かが無意識のうちにそれらを削除した場合、コードはグローバルに書き込みます
それでも、ミニファイヤがより多くのビットを自動的に絞り出す簡単な方法かもしれません。
更新:これまでに言及されていない大きな欠点: 関数が N 個のパラメーターで呼び出された場合、最初の N 個の項目がarguments
引数リストの最初の N 個の識別子にバインドされます ( 10.1.8 の最後の箇条書きを参照)。このことを考慮:
function processStuff(/*ignored:*/i, j, k) {
// use i/j/k to loop
// do stuff with the arguments pseudo-array
}
上記の例では、 を呼び出した場合、 and をprocessStuff(stuff1, stuff2)
設定すると、 i
andj
がそれぞれ上書きarguments[0]
されarguments[1]
ます。