1

我想在 JavaScript 中做这样的事情

var init = function () {
              // do some stuff once
              var once = true

              // overwrite the function 
              init = function () {
                 console.log(once)
              }

}

CoffeeScript 将另一个本地 var init 添加到初始 init 中,因此第二个 init 不会覆盖第一个

var init = function () {
              var init //automatically declared by coffeescript
              // do some stuff once
              var once = true

              // overwrite the function 
              init = function () {
                 console.log(once)
              }

}

一些解决方案/解决方法的提示将不胜感激。

4

2 回答 2

1

更新:在 CoffeeScript 1.0.1 下,下面的答案当时是准确的。在 CoffeeScript 1.1.0 下不再是这种情况,它解决了这个问题。)

哇,这让我很惊讶。咖啡脚本

init = ->
  init = -> console.log once

声明了一个外部init和一个内部init。这让我觉得这更像是一个错误而不是有意识的语言设计决策——编译器在评估外部init =赋值之前更简单地评估函数。我已经继续并就此提出了问题

这是一个解决方法:

init = null
init = ->
  init = -> console.log once

现在只有一个init,范围最外的那个。

于 2011-03-08T16:00:32.063 回答
0

我相信这是设计使然。您不应该依赖隐式全局变量。init是窗口/全局对象的属性,所以只需正确引用它:

window.init = ->
    var once = true
    window.init = ->
        console.log once
于 2011-03-14T05:00:19.343 回答