我有一个代码:
$.each($.parseJSON(data).content,function(){});
我想知道是否会在每次迭代时评估$.parseJSON(data).content
,还是只评估一次?这将显着影响性能。
答案 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"
将打印一次。