var x = myFunction(y);
for (let index = 0; index < x; index++) {
  //do something
}


问题:循环表达式内的x是否必须在每次循环时都运行myFunction才能获取x的值?

如果是这样,将For循环编写为:

for (let index = 0; index < myFunction(y); index++) {
  //do something
}

最佳答案

不,仅当使用myFunction(y)显式调用该函数时,才调用该函数。调用后,返回值存储在x变量中。然后,在循环内部,在每次迭代中,所有发生的事情就是将现有的x变量与index进行比较。

您的第一个代码效率更高。

如果变量是全局对象的属性,并且是吸气剂,则仅引用变量只会导致函数调用和可能产生的副作用。



Object.defineProperty(window, 'foo', {
  get () {
    console.log('function running');
  }
});

foo;
foo;
foo;





这是非常不寻常的。

关于javascript - For循环是否在表达式内部处理函数,直到循环结束?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/60842510/

10-10 18:32
查看更多