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(避开Unicornno-array-for-each)、无嵌套闭包变量遮蔽(避开ESLintno-shadow)、无需continue语句(避开ESLintno-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,提问作者Саша Черных
相关产品推荐
相关产品推荐

