很多语言都内置范围循环的语法,比如 lua:
for i = 0, 9 do
print(i)
end
其他比如 python 也支持 for range 循环。
事实上,ES6 通过 for of 和生成器也可以实现类似的 range 循环:
function* range(beg, end, step = 1) {
for (let i = 0; i < end; i += step)
yield i;
}
for (const i of range(0, 5))
console.log(i); // 0, 1, 2, 3, 4
for (const i of range(0, 10, 2))
console.log(i); // 0, 2, 4, 6, 8
虽然性能比起传统的 for (let i = 0; i < n; i++)
肯定要差一些,但在性能不重要的场合下,这种风格看起来是不是更简洁一些?
比如循环因子只出现 1 处,而传统的循环则出现 3 处。
比如循环因子可以用 const 代替 let 定义。
比如不用纠结用 i++ 还是 ++i 等等。
当然进一步扩展 range 函数,还可以实现 0, -1, -2, ... 递减循环,以及其他更多功能。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.