CoffeeScript变量作用域

4
有没有一种方法可以在“文件”作用域中声明一个变量(它将被CS捕获),而不初始化它?这是一个人为的例子:
init = ->
  counter = 0

inc = ->
  counter += 1

这样是行不通的,因为你需要声明“counter”。在顶部添加“counter = 0”将使其起作用,但“= 0”是不必要的。(一个更现实的例子涉及在页面加载时访问DOM的内容 - 没有正确初始化它的方法在“文件”范围内。)
3个回答

14

就像你提到的那样,你必须在外部范围内定义它。

counter = null
init = ->
  counter = 0
inc = ->
  counter += 1

5
已经有一些速记法被提出,但jashkenas坚信使用= null语法。 - Trevor Burnham
我没有看到过那个,但我猜想这样做的理由是为了保持关键词数量的低。 - mahemoff

4
如果您的函数是对象的一部分,您可以使用@counter,如下所示:
obj = 
  init: ->
    @counter = 0
  inc: ->
    @counter += 1

0

你可以使用反引号 `var counter;`,这样它会被直接传递到生成的 JavaScript 中。

当你遇到这样的问题时,可以查看生成的 JavaScript。很明显,变量作用域在语法上仅限于该函数。

查看生成的 JavaScript 通常是理解 CoffeeScript 结构行为的好方法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接