You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

是否存在与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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 00:36:03