[英]usage of javascript closure function
我試圖弄清楚如何使用閉包函數。 在單擊事件上,我想確定parm1
和parm2
值並在div中顯示它們,然后使用SQL語句將新值更新到表。
如果用戶反復點擊,我想要限制(去抖動)並且僅在用戶停止點擊后5秒執行SQL更新。 但是,每次單擊時都會顯示parm1
和parm2
。
我不確定如何將parms傳遞給SQL進程。
(function() {
// create debounced function
var d_process = $.debounce(SQLprocess, 5000);
$('#myButton').click(function() {
// determine parameters
var parm1 = 1 + 1; // edit: added var
$(".div_1").text(parm1);
var parm2 = 2+2; // edit: added var
$(".div_2").text(parm2);
d_process();
});
}());
function SQLprocess(parm1, parm2) {
//perform an SQL update
}
要將帶參數的SQLprocess傳遞給去抖函數,請更改:
var d_process = $.debounce(SQLprocess, 5000);
對此:
var d_process = $.debounce(function() {SQLprocess(parm1, parm2)}, 5000);
這將創建一個匿名函數,沒有參數傳遞給去抖動。 但是該匿名函數使用正確的參數調用SQLprocess。
有人問為什么你不能這樣做:
var d_process = $.debounce(SQLprocess(parm1, parm2), 5000);
答案是因為,在Javavscript語言中, SQLprocess(parm1, parm2)
是一個函數調用。 它將立即執行該函數並將返回值傳遞給$.debounce()
,這不是您想要的。 $.debounce
期待一個沒有參數的函數,這就是你必須傳遞它的東西。 獲取SQLprocess
參數的SQLprocess
是將其包裝在沒有參數的函數中。 它不必是匿名函數。 如果你想要它也可以像這樣使用命名函數:
function myFunctionWrapper() {
SQLprocess(parm1, parm2);
}
var d_process = $.debounce(myFunctionWrapper, 5000);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.