2011-10-08 32 views
0

這工作:錯誤事件執行的CoffeeScript

$("#add").click(-> stack.op "add") 
$("#sub").click(-> stack.op "sub") 

但這並不:

for op in ['add','sub'] 
    $('#' + op).click(-> stack.op op) 

兩個按鈕執行最後一次的操作, 「子」。

Class Stack 
    add: ... 
    sub: ... 
    op: (name) -> 
    eval "this.#{name}()" 

回答

3

使用do結構:

for op in ['add', 'sub'] 
    do (op) -> 
     $('#' + op).click(-> stack.op op) 

這是因爲for循環不會創建一個閉包。

+0

cji釘了它。請記住'for'循環不會在JavaScript中創建範圍;只有功能。查看我的PragPub文章[CoffeeScript Intervention](http://pragprog.com/magazines/2011-05/a-coffeescript-intervention),瞭解更多關於'do'的信息。 –