给for循环的结束点赋值的优缺点是什么?
What are the pros and cons to assigning the end point of a for loop?
在各种语言中(这里我将使用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相关文章:
- 这是什么 ==- javascript 运算符
- 我的单元测试选项是什么
- 打破承诺链的好方法是什么
- 在AngularJS应用程序中使用封装指令和路由的推荐方式是什么
- Javascript中的空白是什么
- 是什么让一个“;Uncaught RangeError:超过了最大调用堆栈大小“;错误(Chrome,在其他浏览器中显示
- 在JavaScript中拆分日期字符串的更好方法是什么
- 将jQuery.ech()方法转换为本地JavaScript抽象的最佳方法是什么
- Javascript:向对象类添加方法的优缺点是什么
- 使用流星角色的优缺点是什么?
- 将ES5 JavaScript用于Angular 2应用程序以及使用TypeScript的优缺点是什么?
- 这两种JavaScript模式的优缺点是什么
- 给for循环的结束点赋值的优缺点是什么?
- emu -model、emu -restless和emu之间的主要区别(优缺点)是什么?
- 使用extjs的优缺点是什么?
- 使用ajax提交表单的优缺点是什么?
- 在JavaScript / jQuery中,超时与内容加载异步调用倒计时的优缺点是什么?
- 通过这两种不同的方法调用jQuery功能的优缺点是什么
- 在Windows8上编写c# /Xaml与HTML/JavaScript WinRT应用程序的优缺点是什么?
- 与函数相比,使用数组的优缺点是什么?