javascript - 在 for 循环的条件下多次调用属性吗?

标签 javascript optimization

一位程序员告诉我,如果在条件部分添加一个属性,那么在编码循环时,它会在每次迭代时计算。

例如:

var elements=['a','b','c','d'] // imagine a very long list

for (var i=0; i < elements.length; i++) { // <- Here is array.length being called
    var element = elements[i]
}

在这种情况下,如果他告诉我的是真的:elements.length 将在每次迭代时调用以计算条件。

为了优化代码,我将执行以下操作:

var elements=['a','b','c','d'] // imagine a very long list
var elements_length=elements.length

for (var i=0; i < elements_length; i++) { // <- Here is array.length being called
    var element = elements[i]
}

也许这对于小列表来说甚至都不会被注意到。

这一切都是真的吗?有没有办法检查这个?可能这可以用计时器检查,但我想知道这是否是已知行为。

最佳答案

是的,确实如此,但性能提升非常低。 使用 for 循环 时的一项优化是在循环外的变量中分配数组的长度属性,这样您就可以避免引擎在每次迭代中计算数组的长度。

虽然性能提升很低,但只有在非常大的阵列中才会明显。

为了“安全”起见,不管大小始终使用它是一个很好的做法。

请记住,随着时间的推移,JS 引擎变得越来越好,编译器正在做很多更好的优化,并且一些“实践”捕获了存在。这意味着如果此时在循环外分配 Length 属性提供了一个小的性能增益,那么很快这可能就不是真的了。 检查一下,它将提供有关您的案例的一些信息:Hoisting

关于javascript - 在 for 循环的条件下多次调用属性吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38026794/

相关文章:

javascript - iframe 中的 document.execCommand 不起作用

javascript - 关于使用 javascript 对 Web 应用程序进行可能优化的意见

C++ 对不同概念的不同使用声明

c# - 具有相似体的通用和非通用方法

javascript - 从 JPG 切换到 YouTube 视频

javascript - 如何使用鼠标单击并拖动在较小的 div 中滚动大图像?

javascript - 计算angularjs中选中复选框的数量

javascript - 如何在 JavaScript 中格式化连接的异常字符串

mysql - 为什么 MySQL 不使用该子查询的索引?

javascript - html5 canvas 变换和缓存渐变、曲线和旋转