我正在尝试弄清楚如何使用闭包函数。
在单击事件中,我想确定 parm1
和 parm2
的值并将它们显示在 div 中,
然后使用 SQL 语句将新值更新到表中。
如果用户重复点击,我想限制(去抖动)并且只在用户停止点击后 5 秒执行 SQL 更新。但是,parm1
和 parm2
应该在每次点击时显示。
我不确定如何将参数传递给 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 传递给 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/