我想在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)
}
}
非常感谢解决方案/解决方法的一些提示。
答案 0 :(得分:1)
(更新>下面的答案在CoffeeScript 1.0.1下是准确的。在CoffeeScript 1.1.0中不再是这种情况,它解决了这个问题。)
哇,这让我很惊讶。 CoffeeScriptinit = ->
init = -> console.log once
声明外部init
和内部init
。这让我更有可能是一个错误而不是有意识的语言设计决策 - 编译器在评估外部init =
赋值之前更简单地评估函数。我已经开始了filed an issue。
这是一种解决方法:
init = null
init = ->
init = -> console.log once
现在只有一个init
,一个是最外层的。{/ p>
答案 1 :(得分:0)
我相信这是设计的。你不应该依赖隐式全局变量。 init
是窗口/全局对象的属性,因此只需正确引用它:
window.init = ->
var once = true
window.init = ->
console.log once