javascript - 指定 for 循环的终点有哪些优点和缺点?

标签 javascript php loops coding-style

在各种语言中(我将在这里使用 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 语言中迭代字符串。在 C 语言中,strlen() 是一个 O(n) 操作,因为它必须搜索 char 数组以查找终止 0 元素。如果您写道:

for (i = 0; i < strlen(string); i++)

你的循环时间复杂度为 O(n2)。

在像 Javascript 这样的语言中,获取长度的成本并不高,但程序员仍坚持他们的旧习惯。而那些从未使用过其他语言的程序员会向使用过其他语言的人学习习惯用法,因此他们在不知道原因的情况下使用了这种编码风格。

请观看此 YouTube 视频,了解此类事件如何在社区中发生:

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

关于javascript - 指定 for 循环的终点有哪些优点和缺点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25460123/

相关文章:

php 数组到 csv 下载集成到我当前的脚本中无法正常工作

c++ - 如果在数组中找到元素,则打印整行

javascript - 隐藏然后专注于下面的选择元素

javascript - 将代码从 JS 移植到 TypeScript

php - 对表的回显查询 - 打印每个列值两次

php - 使用php/mysql连接两个不同的数据库

php - 查看树莓派状态

javascript - AngularJS、$http 和 transformResponse

javascript - 在 react-router 2 中禁用后退按钮

c# - Automapper 自定义内联映射