嵌套函数场景下JavaScript转CoffeeScript语法求助
解决嵌套箭头函数转CoffeeScript的语法错误问题
先给你正确的CoffeeScript转换写法,有两种清晰的方式:
方式一:用括号包裹setTimeout的所有参数
node.addEventListener 'mousedown', () => setTimeout(() => console.log 'pressed' , 3000)
方式二:让时长参数与setTimeout对齐
node.addEventListener 'mousedown', () => setTimeout () => console.log 'pressed' , 3000
错误原因分析
你之前的代码报错是因为return, 3000这一行的写法完全不符合CoffeeScript的规则:
- CoffeeScript会把缩进的
3000当成内层箭头函数的代码,而你加了逗号,编译器误以为你要给return传多个参数,所以抛出"unexpected comma"错误。 - 如果你调整缩进让
3000和内层函数的代码对齐,它又会被归到内层函数里,而不是setTimeout的第二个参数。
关键写法要点
在CoffeeScript中,当函数的参数包含多行的嵌套函数时,要明确告诉编译器哪些是当前函数的参数:
- 要么用括号把函数的所有参数括起来,像方式一那样,清晰区分嵌套函数和第二个参数;
- 要么让后续参数和函数名(比如
setTimeout)保持同一缩进层级,编译器就会识别这是当前函数的参数,而不是嵌套函数的内部代码。
另外,CoffeeScript会自动返回函数最后一行的结果,所以代码里的return可以直接省略,简化后的代码更干净:
node.addEventListener 'mousedown', () => setTimeout () => console.log 'pressed' , 3000
内容的提问来源于stack exchange,提问作者John Deighan
相关产品推荐
相关产品推荐

