给for循环的结束点赋值的优缺点是什么?

What are the pros and cons to assigning the end point of a for loop?

本文关键字:优缺点 是什么 赋值 结束 for 循环      更新时间:2023-09-26

在各种语言中(这里我将使用JavaScript,但我已经在PHP和c++以及可能在其他地方看到过这样做),似乎有几种方法可以构造一个简单的for循环。版本1类似于:

var top = document.getElementsByTagName("p"); 
for (var i = 0; i < top.length; i++) {
...do something
}

而在其他地方,我看到人们像这样构造for循环:

for (var i = 0, ii = top.length; i < ii; i++) 

似乎人们这样做是没有道理的——同一个程序员会在同一个脚本中做这两件事。有什么理由只做其中一个而不做另一个吗?

欢呼

在某些语言中,获取数组或字符串的长度可能是开销较大的操作。因为它在循环过程中不会改变,所以每次测试迭代变量是否到达终点时都这样做是浪费的。因此,获取一次长度并将其保存在变量中会更有效。

在C语言中,strlen()是一个O(n)操作,因为它必须搜索字符数组寻找结束的0元素。如果你写:
for (i = 0; i < strlen(string); i++)

你的循环将是O(n2)。

在像Javascript这样的语言中,获得长度是不昂贵的,但是程序员坚持他们的老习惯。而从未使用过其他语言的程序员从使用过这些语言的人那里学习习语,所以他们使用这种编码风格甚至不知道原因。

查看这段YouTube视频,了解这类事情在社区中是如何发生的:

https://www.youtube.com/watch?v=b4vJ8l2NfIM