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

2024年CoffeeScript 2中如何正确在循环内使用函数?

CoffeeScript 2循环内使用函数的正确解法

针对遍历数组并通过setTimeout输出内容的需求,以下两种方案可解决变量绑定问题,同时规避你遇到的各类ESLint报错:

方案1:使用CoffeeScript原生do表达式(推荐)

CoffeeScript的do语法可立即执行匿名函数并创建独立作用域,确保每个setTimeout捕获当前迭代的正确变量值:

items = ["内容1", "内容2", "内容3"]

for item in items
  do (item) ->
    setTimeout ->
      console.log item
    , 100
  • 原理:do会将当前循环的item作为参数传入立即执行函数,每个迭代生成独立的作用域,彻底解决变量绑定错误
  • 规避报错:无需使用forEach(避开Unicorn no-array-for-each)、无嵌套闭包变量遮蔽(避开ESLint no-shadow)、无需continue语句(避开ESLint no-continue)

方案2:使用块级变量let声明

CoffeeScript 2支持ES6的let关键字,通过在循环内声明块级变量,确保每个迭代的变量绑定独立:

items = ["内容1", "内容2", "内容3"]

for item in items
  let currentItem = item
  setTimeout ->
    console.log currentItem
  , 100
  • 原理:let声明的变量仅在当前循环块内有效,每个迭代会创建新的currentItem实例,定时器能正确捕获对应值
  • 优势:写法更贴近ES6习惯,同样能规避所有你提到的ESLint规则冲突

两种方案均符合CoffeeScript 2的语法规范,且完全满足你的需求限制。

内容的提问来源于stack exchange,提问作者Саша Черных

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 17:24:56