我有一个像这样的代码:
$.each($.parseJSON(data).content,function(){});
我想知道是否$.parseJSON(data).content
将在每次迭代中评估,还是只评估一次?这将显着影响性能。
我有一个像这样的代码:
$.each($.parseJSON(data).content,function(){});
我想知道是否$.parseJSON(data).content
将在每次迭代中评估,还是只评估一次?这将显着影响性能。
函数调用的参数总是在函数被调用之前被评估。这不是 jQuery 特定的。见规格:
3. 令 argList 为求
Arguments
值的结果,生成参数值的内部列表(见 11.2.4)。...
8. 返回调用 on 的 [[Call]] 内部方法的
func
结果,提供thisValue
this 值并提供列表argList
作为参数值。
为清楚起见,循环中不是这种情况:for
for(var i = 0; i < $.parseJSON(data).content.length; i++) {
}
在这里,每次都会评估第二个表达式。这是有道理的,因为在一个简单的循环中,您希望i < length
在每次迭代时重新评估条件。但是您不想$.parseJSON
在每次迭代时都运行。所以在for
循环中,将表达式分解出来是有意义的。
它只评估一次。
您可以在 javascript 控制台中自行测试:
var ary = [1,2,3,4],
getAry = function() {
console.log('ok');
return ary;
};
$.each(getAry(), function(idx, val) {});
"ok"
将打印一次。