用花括号函数?

Function with curly braces?

此 CoffeeScript 代码:

root = document.getElementById "hello"

document.addEventListener("DOMContentLoaded", () => {
    root.innerHTML = "goodbye"
}, false)

给出一个error: unexpected =。当我编译这段代码时:

root = document.getElementById "hello"

document.addEventListener("DOMContentLoaded", =>
    root.innerHTML = "goodbye"
, false)

有效。但是,我真的不喜欢省略花括号的歧义。

有没有办法用花括号或等效物将 CoffeeScript 代码块括起来?

花括号 ({}) 不能用于 coffeescript 中的代码块。相反,你使用缩进。

在 Coffeescript 中,大括号用于 string interpolation and (optionally) for defining objects

来自 coffeescript.org

Instead of using curly braces { } to surround blocks of code in functions, if-statements, switch, and try/catch, use indentation.


在您的示例中,大括号被解释为对象定义,其中 = 引发异常,因为它期望 : 定义对象属性。

用于定义代码块的缩进是 Coffeescript 的核心功能。就个人而言,我根本不认为这段代码有歧义。但是在函数不是最后一个参数的情况下,用尾随 , false 读取是很奇怪的。

我建议从事件侦听器中分离出函数定义:

onDOMContentLoaded =>
  root.innerHTML = "goodbye"

document.addEventListener "DOMContentLoaded", onDOMContentLoaded, false

如果你真的想要一些东西来分隔函数,你可以把它包在括号里。不过,您需要在括号中包含 =>

document.addEventListener("DOMContentLoaded", ( =>
  root.innerHTML = "goodbye"
), false)