0

この質問を検索しましたが、得られた回答は私の質問を解決しません。これが私の質問です。10 個のメンバーを持つ配列があります。

JS コード

var array = [1,2,3,4,5,6,7,8,9,10];

ループ 1:

for(var i=0,len=array.length;i<len;i++){};

ループ 2

var len = array.length;
for(var i=0;i<len;i++){};

ループ 3

for(var i=0;i<array.length;i++){}

1 と 3 の間に大きなパフォーマンスの違いがあることはわかっています。しかし、1 と 2 で性能に違いはありますか? .

4

4 に答える 4

0

いいえ、違いはありません。Javascript は変数を巻き上げます。

したがって、code1 は次のようになります。

var i, len;
for (i=0, len=array.lengh; i<len; i++) {};

code2 になります

var i, len;
len = array.lengh;
for (i=0; i<len; i++) {};

違うのは置く場所だけlen=array.length

于 2012-11-01T12:07:42.370 に答える
0

例 2 では、解析ロジックに解析するトークンがもう 1 つ含まれていますが、顕著な違いはないはずです。

短い方が良い:var a,b,c,d;よりも高速である必要があります

var a; var b; var c; var d;
于 2012-11-01T12:07:52.917 に答える
0

ループ 1 とループ 2 はどちらも同じです。これは、var len の初期化が 1 回であるため、パフォーマンスに違いはありません。

于 2012-11-01T12:10:22.537 に答える
0

Javascript には、ブロック スコープではなく関数スコープがあります (新しいlet構文を除く)。for ループは関数ではないため、新しいスコープを作成しません。つまり、

for (var i...) { ... }

とまったく同じです

var i...
for (...) { ... }

ただし、for ループの条件ステートメントは、javascript の反復ごとに再評価されます。これは、これを意味します。

for(var i=0;i<array.length;i++){}

array.length何度も評価する必要がありますが、これは

var len = array.length;
for(var i=0;i<len;i++){};

once はそれを 1 回評価します。理論的には高速ですが、マイクロ最適化であるため、実際には問題になりません。

于 2012-11-01T12:24:47.757 に答える