在for循环javascript之前或之中计算.length

时间:2018-07-06 21:34:14

标签: javascript performance

我正在关注优化和简单的智力反应。

在javascript中,大多数时候您都在谈论for循环。

如果您在互联网上找到。您会看到很多人说代码效率较低

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

for(var i = 0; i < arr.length; i++) {

}

然后我考虑了一下。似乎可以这样说,因为如果您只是阅读代码,那么每次循环进入时都将在第一个代码中说出来。

所以我想借些实用的东西。

如果您发现有关javascript的一切都是对象,那么您可以“使用” setter和getter吗?

所以我尝试这个

var len = arr.length;

for(var i = 0; i < len; i++) {
}

但是我在ATM上发现的问题是我处于无限循环中。

1 个答案:

答案 0 :(得分:0)

起初,实例上没有原型

var tmp = eles.prototype.length;

prototypeeles上不存在,并且length在原型上不存在,仅存在于实例本身。而且您无法获得对底层getter / setter的引用,因为它们是完全透明的。但是,您可以:

 var number = eles.length;

然后在吸气剂内部返回该数字:

 return tmp;

但这仍然很糟糕,原因有三个:

1)NodeList是动态的,因此其长度可能会在中间变化,这将导致范围超出范围,并且意外错误也很严重。

2)您杀死了每一个认真的js引擎以前都会做的内联优化。在大多数浏览器中,for(const el of array)实际上比摆弄索引要快。

3)它不会改变任何东西,因为它的属性查找很慢,而不是吸气剂本身。