1

JavaScriptでこのようなことをしたい

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

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

}

CoffeeScript は最初の init に別のローカル var init を追加するため、2 番目の 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これで、最も外側のスコープを持つ が 1 つだけになりました。

于 2011-03-08T16:00:32.063 に答える
0

これは設計によるものだと思います。暗黙のグローバルに依存するべきではありません。initウィンドウ/グローバル オブジェクトのプロパティであるため、正しく参照してください。

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