是否存在与C++预处理器宏等效的JavaScript实现方案?
JavaScript实现repeat循环的方案
JS本身没有内置C++风格的预处理器宏,我们可以通过运行时封装或者编译期转换两种方式实现你要的repeat写法。
方案1:纯运行时实现(无任何构建依赖)
1.1 迭代器版本(推荐)
支持break、continue等原生循环关键字,语法接近你要的写法:
// 封装repeat函数 function repeat(iterations) { return { *[Symbol.iterator]() { for (let i = 0; i < iterations; i++) { yield i } } } } // 使用方式 for (const iterator of repeat(10)) { // 这里写你要重复执行的代码 console.log(`第${iterator}次执行`) }
1.2 回调函数版本
写法更简洁,适合不需要跳出循环的场景:
// 封装repeat函数 function repeat(iterations, callback) { for (let i = 0; i < iterations; i++) { callback(i) } } // 使用方式 repeat(10, iterator => { // 这里写你要重复执行的代码 console.log(`第${iterator}次执行`) })
1.3 临时快速实现
不需要提前封装,直接一行搞定:
Array.from({length: 10}).forEach((_, iterator) => { console.log(`第${iterator}次执行`) })
方案2:编译期转换(完全匹配你要的语法,无运行时开销)
如果你完全想要repeat(x) { 代码 }的写法,可以借助Babel的babel-plugin-macros能力自定义宏,编译阶段会直接把你的repeat写法转换为原生for循环,和你手写for循环的性能、特性完全一致,没有任何额外运行时开销。
示例的宏实现后,你写的代码:
repeat(10) { console.log("重复执行") }
会被编译为:
for (let iterator = 0; iterator < 10; iterator++) { console.log("重复执行") }
提示:运行时实现的额外开销极低,99%的业务场景下完全可以忽略,如果是对性能要求极高的高频循环场景,优先选择编译期宏方案或者原生for循环。
内容的提问来源于stack exchange,提问作者xevinf
相关产品推荐
相关产品推荐

