2015-07-19 55 views
1

我有一個提交按鈕,點擊它時,一個模式對話框引起下面的代碼來執行:錯誤在JavaScript關閉

$("#addqueuebutton").on("click",function(){ 

    var counter = 0; 
    return function(){ 
     counter += 1; 
     ... 
     alert(counter); 
    }; 
}); 

我必須確保counter被初始化只有一次,所以我嘗試使用閉包。但是由於警告框沒有出現,代碼沒有正確執行。我在線編譯器上測試了代碼,看起來是正確的。有人可以告訴我,我的語法是否有問題?

+0

嘗試調用你的函數http://jsfiddle.net/xn24as5b/ –

回答

5

您將錯誤的功能分配給click。當您單擊時,您初始化counter,然後返回內部函數。

您需要調用外部函數並將其返回值分配給第二個參數on()

});應該}());

或者,這樣可以很清楚:

function create_counter(){ 
    var counter = 0; 

    return function(){ 
     counter += 1; 
     ... 
     alert(counter); 
    }; 
} 

var counter_incrementing_function = create_counter() 

$("#addqueuebutton").on("click", counter_incrementing_function); 
+0

OK,你是對的。我第一次使用閉包,所以讓我試着理解這一點 - 通過使用括號對,我打電話給外部函數。早些時候,內部功能被稱爲? – user3033194

+1

@ user3033194 - 否。當您單擊它返回的元素時,但預計會出現一個布爾值,因此它被(有效)轉換爲「true」並且從不調用。 – Quentin

+0

我現在看到了,非常感謝你! – user3033194