jQuery.each是否在每次迭代中评估集合表达式?

时间:2013-02-04 18:51:36

标签: javascript jquery

我有一个代码:

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

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

2 个答案:

答案 0 :(得分:5)

在调用函数之前,始终会计算函数调用的参数。这不是jQuery特有的。见the specification

  

3。设argList是评估Arguments 的结果,产生一个参数值的内部列表(见11.2.4)。

     

...

     

8。返回在[{1}} 上调用[[Call]]内部方法的结果,提供func作为此值并提供列表thisValue作为参数值


为清楚起见,argList循环中的情况

for

这里,每次都会评估第二个表达式。这是有道理的,因为在一个简单的循环中,您希望在每次迭代时重新评估条件for(var i = 0; i < $.parseJSON(data).content.length; i++) { } 。但是想要在每次迭代时运行i < length。因此,在$.parseJSON循环中,将表达式分解出来是有意义的。

答案 1 :(得分:2)

仅评估一次

您可以在javascript控制台中自行测试:

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

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

"ok"将打印一次。