很多语言都内置范围循环的语法,比如 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, ... 递减循环,以及其他更多功能。