首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >javascript闭包函数的用法

javascript闭包函数的用法
EN

Stack Overflow用户
提问于 2011-11-09 12:48:47
回答 1查看 164关注 0票数 1

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

如果用户重复单击,我希望在用户停止单击后5秒进行节流(去抖动)和SQL更新。但是,应该在每次单击时显示parm1parm2

我不确定如何将参数传递给SQL进程。

代码语言:javascript
复制
(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/

EN

回答 1

Stack Overflow用户

发布于 2011-11-09 13:34:25

要将带参数的SQLprocess传递给debounce函数,请更改以下内容:

代码语言:javascript
复制
var d_process = $.debounce(SQLprocess, 5000);

要这样做:

代码语言:javascript
复制
var d_process = $.debounce(function() {SQLprocess(parm1, parm2)}, 5000);

这将创建一个不带任何参数的匿名函数,该函数将传递给creates。但是这个匿名函数使用正确的参数调用SQLprocess。

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

代码语言:javascript
复制
var d_process = $.debounce(SQLprocess(parm1, parm2), 5000);

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

代码语言:javascript
复制
function myFunctionWrapper() {
    SQLprocess(parm1, parm2);
}

var d_process = $.debounce(myFunctionWrapper, 5000);
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8060459

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档