1

次のCoffeescriptコードがあります:

for name, data of statistics
    row = document.createElement 'tr'
    row.onclick = ->
        alert name

ただし、(大規模な Web ページのコンテキストで) コンパイルして実行すると、どの行をクリックしても同じ名前でアラートが表示されます。定数であるかのように、変数を覚えているようです。

私は何を間違っていますか?

編集:

私はこの問題を発見しましたが、それを修正する方法がわかりません: Javascript/Coffeescript は、ループの最後に到達するまで「name」変数を評価しません。

4

1 に答える 1

1

定義している (および行の onclick 属性に割り当てている) 関数はすべて、その関数 (名前) の外部にある同じ変数にアクセスできます。ループの最後で、 name には 1 つの値 (前述のように、ループの最後の項目) があるため、各 onclick 関数はその値を警告します。

これは、'name' を変更されない値にバインドすることで修正できます。この質問は 1 つの解決策を提示します。この質問には、読む価値のある有用な背景がいくつかあります。

于 2013-02-22T02:12:20.990 に答える