Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jQuery.each是否在每次迭代中计算集合表达式?_Javascript_Jquery - Fatal编程技术网

Javascript jQuery.each是否在每次迭代中计算集合表达式?

Javascript jQuery.each是否在每次迭代中计算集合表达式?,javascript,jquery,Javascript,Jquery,我的代码如下: $.each($.parseJSON(data).content,function(){}); 我想知道$.parseJSON(data).content是否会在每次迭代中进行评估,还是只评估一次?这将显著影响性能。函数调用的参数总是在调用函数之前进行评估。这不是特定于jQuery的。见: 三,。让argList作为计算参数的结果,生成参数值的内部列表(见11.2.4) 八,。返回调用func上的[[Call]]内部方法的结果,提供thisValue作为this值,提供lis

我的代码如下:

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

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

函数调用的参数总是在调用函数之前进行评估。这不是特定于jQuery的。见:

三,。让argList作为计算
参数的结果,生成参数值的内部列表(见11.2.4)

八,。返回调用
func
上的[[Call]]内部方法的结果,提供
thisValue
作为this值,提供list
argList
作为参数值


为清楚起见,这是而不是
中针对
循环的情况:

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

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

这里,每次都对第二个表达式求值。这是有意义的,因为在一个简单的循环中,您希望在每次迭代时重新评估条件
i
。但您不希望在每次迭代时都运行
$.parseJSON
。因此,在
for
循环中,将表达式分解出来是有意义的。

它只计算一次

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

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

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

“ok”
将被打印一次。

对象和迭代次数都被缓存,但它确实使用
obj[i]
或obj
中的
i来查找每个值,就像任何其他循环一样。您可以通过阅读了解它的工作原理。源位置: