一位程序员告诉我,如果在条件部分添加一个属性,那么在编码循环时,它会在每次迭代时计算。
例如:
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/