JavaScript如何处理语句

时间:2016-04-27 18:58:13

标签: javascript

这真的是一个关于JavaScript效率的问题,我可能会忽略这一点。无论如何,假设您定义一个for语句,如:for (var i = 0; i<10; i++){...}。每次for语句循环,它是否每次循环检查for语句的参数?为了更清楚,我们假设我们使用一个返回随机数的函数,我们在for循环中使用它作为我们的条件,如下所示:

function test(){
    var z = /*NEW RANDOM VALUE*/;
    return z;
}
for (var i = 0; i<test();i++){
    ...
}

test()函数会在每个循环中调用,还是只调用一次?

修改

感谢您的大力支持,我本质上不确定是否事先为一个条件定义一个变量在for循环中是有益的 - 如果每个循环都调用该条件,那么定义一个变量就是(并且是)。

3 个答案:

答案 0 :(得分:2)

我刚刚使用了以下代码,它回答了我自己的问题:是每个循环检查条件。以下是我用来测试的内容:

function rand(){
    console.log("rand() called.");
    return Math.floor((Math.random()*10)+1);
}
for (var i = 0;i<rand();i++){
    console.log("Loop: "+i);
}

结果:

enter image description here

答案 1 :(得分:1)

尽管现代Javascript引擎试图优化各种事物,但每次迭代都会调用它。缓存Javascript数组的长度是一种常见的Javascript模式,因为第一个实现很慢。

var l=arr.length;
for (var i=0; i<l; i++) { /*...*/ }

答案 2 :(得分:1)

是的,每次检查条件。如果您要编写以下内容,则每次都会计算arr.length。

var arr = ['cat', 'dog', 'llama'];

for (var i = 0; i < arr.length; i++) {
  console.log(arr[i]);
}

相反,编写下面的内容会更有效,因为arr.length只会计算一次。

var arr = ['cat', 'dog', 'llama'];
var len = arr.length;
for (var i = 0; i < len; i++) {
  console.log(arr[i]);
}