2

我有一个像这样的代码:

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

我想知道是否$.parseJSON(data).content将在每次迭代中评估,还是只评估一次?这将显着影响性能。

4

2 回答 2

5

函数调用的参数总是在函数被调用之前被评估。这不是 jQuery 特定的。见规格

3. 令 argList 为Arguments值的结果,生成参数值的内部列表(见 11.2.4)。

...

8. 返回调用 on 的 [[Call]] 内部方法的func结果,提供thisValuethis 值并提供列表argList作为参数值。


为清楚起见,循环中不是这种情况:for

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

}

在这里,每次都会评估第二个表达式。这是有道理的,因为在一个简单的循环中,您希望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 回答