簡體   English   中英

使用javascript閉包函數

[英]usage of javascript closure function

我試圖弄清楚如何使用閉包函數。 在單擊事件上,我想確定parm1parm2值並在div中顯示它們,然后使用SQL語句將新值更新到表。

如果用戶反復點擊,我想要限制(去抖動)並且僅在用戶停止點擊后5秒執行SQL更新。 但是,每次單擊時都會顯示parm1parm2

我不確定如何將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
}

參考: http//code.google.com/p/jquery-debounce/

要將帶參數的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM