for循环效率更高。它是一个循环结构,专门设计用于在条件为true时进行迭代,同时提供步进机制(通常用于增加迭代器)。例:
for (var i=0, n=arr.length; i < n; ++i ) { ...}
这并不是说 for-loops总是会更高效,只是JS引擎和浏览器已经对其进行了优化。多年来,关于哪种循环构造更有效(折衷,减少,逆转等)一直存在折衷方案-不同的浏览器和JS引擎拥有自己的实现,这些实现提供了不同的方法来产生相同的结果。随着浏览器进一步优化以满足性能要求,从理论上讲
[].forEach,它可以以更快的速度或与相当的方式实现
for。好处:
- 有效率的
- 早期循环终止(荣誉
break
和continue
) - 条件控制(
i<n
可以是任何值,并且不限于数组的大小) - 变量范围(
var i
叶i
循环结束后可用)
.forEach是主要迭代数组(也遍历其他可枚举对象,例如
Map和
Set对象)的方法。它们是较新的,并且提供的代码在主观上更易于阅读。例:
好处:[].forEach((val, index)=>{ ...});
- 不涉及变量设置(迭代数组的每个元素)
functions / arrow-functions将变量范围限定在块上
在上面的示例中,val
它将是新创建的函数的参数。因此,val
在循环之前调用的任何变量在结束后都将保留其值。从主观上讲,它更易于维护,因为它可能更容易识别代码在做什么—它遍历了可枚举的对象;而for循环可用于任何数量的循环方案
性能
性能是一个棘手的话题,通常在涉及前瞻性或方法时需要一些经验。为了提前(开发时)确定可能需要多少优化,程序员必须对问题案例的过往经验有很好的了解,并对潜在的解决方案有很好的理解。
在某些情况下,使用jQuery有时可能会太慢(有经验的开发人员可能知道),而在其他情况下则可能不是很重要,在这种情况下,库的跨浏览器合规性和易于执行其他功能(例如AJAX,事件处理)值得节省开发(和维护)时间。
另一个例子是,如果性能和优化就是一切,那么除了机器或程序集之外就没有其他代码了。显然,事实并非如此,因为有许多不同的高级和低级语言,每种语言都有自己的取舍。这些权衡包括但不限于专业化,开发简便性和速度,维护简便性和速度,优化代码,无错误代码等。
方法如果您不太了解某些内容是否需要优化的代码,则通常最好先编写可维护的代码。从那里,您可以测试并找出需要时需要注意的地方。
也就是说,某些明显的优化应该是一般实践的一部分,而不需要任何思考。例如,考虑以下循环:
for (var i=0; i < arr.length; ++i ){}
对于循环的每次迭代,Javascript都会
arr.length在每个循环上检索,进行键查找成本计算。没有理由不应该这样做:
for (var i=0, n=arr.length; i < n; ++i){}
这做同样的事情,但是只检索
arr.length一次,缓存变量并优化代码。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)