javascript - javascript闭包函数的使用

标签 javascript closures throttling

我正在尝试弄清楚如何使用闭包函数。 在单击事件中,我想确定 parm1parm2 的值并将它们显示在 div 中, 然后使用 SQL 语句将新值更新到表中。

如果用户重复点击,我想限制(去抖动)并且只在用户停止点击后 5 秒执行 SQL 更新。但是,parm1parm2 应该在每次点击时显示。

我不确定如何将参数传递给 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 传递给 debounce 函数,请更改:

var d_process = $.debounce(SQLprocess, 5000);

为此:

var d_process = $.debounce(function() {SQLprocess(parm1, parm2)}, 5000);

这会创建一个匿名函数,没有传递给 debounce 的参数。但是那个匿名函数使用正确的参数调用 SQLprocess。


有人问为什么你不能这样做:

var d_process = $.debounce(SQLprocess(parm1, parm2), 5000);

答案是因为,在Javavscript语言中,SQLprocess(parm1, parm2)是一个函数调用。它将立即执行该函数并将返回值传递给 $.debounce(),这不是您想要的。 $.debounce 需要一个没有参数的函数,所以这是你必须传递给它的。将参数传递给 SQLprocess 的方法是将其包装在一个没有参数的函数中。它不必是匿名函数。如果需要,它也可以像这样使用命名函数:

function myFunctionWrapper() {
    SQLprocess(parm1, parm2);
}

var d_process = $.debounce(myFunctionWrapper, 5000);

关于javascript - javascript闭包函数的使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8060459/

相关文章:

javascript - XMLHttpRequest 服务器响应状态为 405(方法不允许)

JavaScript eval() JSON 问题

ios - 您如何等待主队列完成处理程序?

swift - RxSwift 使用附加时间标志限制 Debounce 触发周期性事件

javascript - 我如何使用 RxJs 推迟对 AJAX 调用的任何请求,直到前一个请求解决

javascript - className条件不是动态的?

javascript - Material Design Lite 插件正则表达式 javascript

快速捕获具有相同名称的值

JavaScript 闭包函数传递给事件监听器

javascript - 为什么前 4 次执行的 setInterval 调用没有受到限制?