我找不到,2024 年 CoffeeScript 2 中在循环内使用函数的正确方法是什么(或者用什么替换它)。
我应该使用下面给出的变体之一,还是 CoffeeScript 有更好的解决方案?
我需要在循环内运行一个函数。我的 MCVE 中的 全局函数
setTimeout()
只是为了让 MCVE 变得简单。在实际项目中我使用其他函数。
数组示例:
kiraСharacteristicsArray = ["Goddess", "Ideal", "Perfection"]
我想得到这个控制台输出:
Kira is Goddess!
Kira is Ideal!
Kira is Perfection!
kiraСharacteristicsArray = ["Goddess", "Ideal", "Perfection"]
for kiraСharacteristic from kiraСharacteristicsArray
setTimeout (->
console.log "Kira is #{kiraСharacteristic}!"
), 0
编译的JavaScript:
var kiraСharacteristicsArray, kiraСharacteristic;
kiraСharacteristicsArray = ["Goddess", "Ideal", "Perfection"];
for (kiraСharacteristic of kiraСharacteristicsArray) {
setTimeout((function() {
return console.log(`Kira is ${kiraСharacteristic}!`);
}), 0);
}
结果:
Kira is Perfection!
Kira is Perfection!
Kira is Perfection!
简单的 ECMAScript 解决方案在 CoffeeScript 中不起作用:
const
和 let
。var
,而不是 const
和 let
。var
替换为 const
和 let
。正如@Alex Wayne 在他的回答中所描述的那样:
kiraСharacteristicsArray = ["Goddess", "Ideal", "Perfection"]
for kiraСharacteristic from kiraСharacteristicsArray
do(kiraСharacteristic) ->
setTimeout (->
console.log "Kira is #{kiraСharacteristic}!"
), 0
编译的JavaScript:
var kiraСharacteristicsArray, kiraСharacteristic;
kiraСharacteristicsArray = ["Goddess", "Ideal", "Perfection"];
for (kiraСharacteristic of kiraСharacteristicsArray) {
(function(kiraСharacteristic) {
return setTimeout((function() {
return console.log(`Kira is ${kiraСharacteristic}!`);
}), 0);
})(kiraСharacteristic);
}
no-shadow
错误:
6:13 错误“kiraСcharacteristic”已在第 1 行第 16 列无阴影的上部范围中声明
kiraСharacteristicsArray = ["Goddess", "Ideal", "Perfection"]
kiraСharacteristicsArray.forEach (kiraСharacteristic) ->
setTimeout (->
console.log "Kira #{kiraСharacteristic}!"
), 0
编译的JavaScript:
var kiraСharacteristicsArray;
kiraСharacteristicsArray = ["Goddess", "Ideal", "Perfection"];
kiraСharacteristicsArray.forEach(function(kiraСharacteristic) {
return setTimeout((function() {
return console.log(`Kira ${kiraСharacteristic}!`);
}), 0);
});
我得到了预期的控制台输出,但是Unicorn返回
no-array-for-each
错误:
5:11 错误 使用
而不是for…of
unicorn/no-array-for-each.forEach(…)
我修复了上面的 JavaScript 使用 ESLint、Unicorn 和
prefer-arrow-function
插件 使用 eslint --fix
CLI 命令:
var kiraСharacteristicsArray;
kiraСharacteristicsArray = ["Goddess", "Ideal", "Perfection"];
for (const kiraСharacteristic of kiraСharacteristicsArray) {
setTimeout((() => console.log(`Kira ${kiraСharacteristic}!`)), 0); continue;
}
no-continue
错误:
6:64 错误 意外使用 continue 语句 no-continue
请不要提供:
kiraСharacteristicsArray = ["Goddess", "Ideal", "Perfection"]
`for(const kiraСharacteristic of kiraСharacteristicsArray)
setTimeout(() =>
console.log("Kira is #{kiraСharacteristic}!")
), 0)
`