大括号功能?

时间:2018-08-14 20:23:06

标签: coffeescript

此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代码块?

1 个答案:

答案 0 :(得分:0)

大括号({})不能用于coffeescript中的代码块。而是使用缩进。

在Coffeescript中,string interpolation中使用花括号,defining objects中使用(可选)花括号。

来自coffeescript.org

  

使用缩进代替使用花括号{}包围函数,if语句,切换和try / catch中的代码块。


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

定义代码块的缩进是Coffeescript的核心功能。就我个人而言,我根本不认为这段代码是模棱两可的。但是在函数不是最终参数的情况下,以结尾的, false进行读取非常奇怪。

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

onDOMContentLoaded =>
  root.innerHTML = "goodbye"

document.addEventListener "DOMContentLoaded", onDOMContentLoaded, false

如果您确实想对函数进行定界,则可以将其包装在括号中。不过,您将需要在圆括号内包括=>

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