2

私は次のようなコードを持っています:

$.each($.parseJSON(data).content,function(){});

$.parseJSON(data).contentが反復ごとに評価されるのか、それとも 1 回だけ評価されるのかを知りたいです。これはパフォーマンスに大きく影響します。

4

2 に答える 2

5

関数呼び出しの引数は、関数が呼び出される前に常に評価されます。これは jQuery 固有のものではありません。仕様を参照してください:

3. argList を を評価Argumentsした結果とし、引数値の内部リストを作成します (11.2.4 を参照)。

...

8. の [[Call]] 内部メソッドを呼び出しfuncた結果を返し、 this 値として提供thisValueし、リストargListを引数値として提供します。


明確にするために、これはループには当てはまりません。for

for(var i = 0; i < $.parseJSON(data).content.length; i++) {

}

ここでは、2 番目の式が毎回評価されます。i < length単純なループでは、反復ごとに条件を再評価する必要があるため、これは理にかなっています。ただし、すべての反復で実行する必要はありません。$.parseJSONしたがって、forループでは、式を因数分解することは理にかなっています。

于 2013-02-04T18:55:33.023 に答える
2

一度だけ評価されます。

これは、JavaScript コンソールで自分でテストできます。

    var ary = [1,2,3,4],
        getAry = function() { 
            console.log('ok'); 
            return ary; 
        };

$.each(getAry(), function(idx, val) {});

"ok"一度印刷されます。

于 2013-02-04T18:59:10.107 に答える