javascript-将回调作为参数传递给函数
我试图编写一个通用函数,它将函数和毫秒数作为参数,并将其设置为setTimeout函数。我试着javascript-将回调作为参数传递给函数,javascript,jquery,javascript-events,Javascript,Jquery,Javascript Events,我试图编写一个通用函数,它将函数和毫秒数作为参数,并将其设置为setTimeout函数。我试着 $("#Delay").click(function() { delayCallBack(someFunction(a, b), 100); }); 在delayCallBack函数中 function delayCallBack(event, time) { setTimeout(function() { event(); }, time); }; 但这不
$("#Delay").click(function() {
delayCallBack(someFunction(a, b), 100);
});
在delayCallBack函数中
function delayCallBack(event, time) {
setTimeout(function() {
event();
}, time);
};
但这不起作用,并向我抛出javascript错误。有人能帮我做这件事吗?()
调用函数,所以你调用函数而不是传递它。像传递普通变量一样传递函数:
$("#Delay").click(function() {
delayCallBack(someFunction, 100);
});
您的函数可以稍微清理一下。。。同样,这与直接调用
setTimeout
没有什么区别
function delayCallBack(callback, time) {
setTimeout(callback, time);
}
要传递参数
a
和b
,可以从现有函数中创建一个新函数,该函数部分应用a
和b
,然后传递:
$("#Delay").click(function() {
delayCallBack(someFunction.bind(null, a, b), 100);
});
更多的。演示:()
调用函数,因此您调用函数而不是传递函数。像传递普通变量一样传递函数:
$("#Delay").click(function() {
delayCallBack(someFunction, 100);
});
您的函数可以稍微清理一下。。。同样,这与直接调用
setTimeout
没有什么区别
function delayCallBack(callback, time) {
setTimeout(callback, time);
}
要传递参数
a
和b
,可以从现有函数中创建一个新函数,该函数部分应用a
和b
,然后传递:
$("#Delay").click(function() {
delayCallBack(someFunction.bind(null, a, b), 100);
});
更多的。演示:更换
$("#Delay").click(function() {delayCallBack(someFunction(a,b), 100);});
与
第一行执行someFunction(a,b)
而不是第二行执行的操作,将引用传递给要执行的函数。Replace
$("#Delay").click(function() {delayCallBack(someFunction(a,b), 100);});
与
第一行执行
someFunction(a,b)
,而不是第二行执行的操作,将引用传递给要执行的函数。这个问题在JavaScript中有一个令人惊讶的棘手答案,因为您传递的值是a
和b
。考虑Gerard Sexton的解决方案
$("#Delay").click(function() {
delayCallBack(function() {
someFunction(a,b);
}, 100);
});
该代码的作用取决于a
和b
的定义位置以及绑定处理程序后它们会发生什么。假设我们把它放在上下文中:
$(function () {
var a, b;
a = b = 5;
$("#Delay").click(function() {
delayCallBack(function() {
someFunction(a,b);
}, 100);
});
a = b = 7;
}
然后将使用a=b=7
调用someFunction
,而不是a=b=5
。如果需要第一个值,则必须在绑定处理程序时复制这些值。像这样:
$(function () {
var a, b;
function bind(a, b) {
$("#Delay").click(function() {
delayCallBack(function() {
someFunction(a,b);
}, 100);
});
}
a = b = 5;
bind(a, b);
a = b = 7;
}
这个问题在JavaScript中有一个令人惊讶的棘手答案,因为您传入了值
a
和b
。考虑Gerard Sexton的解决方案
$("#Delay").click(function() {
delayCallBack(function() {
someFunction(a,b);
}, 100);
});
该代码的作用取决于a
和b
的定义位置以及绑定处理程序后它们会发生什么。假设我们把它放在上下文中:
$(function () {
var a, b;
a = b = 5;
$("#Delay").click(function() {
delayCallBack(function() {
someFunction(a,b);
}, 100);
});
a = b = 7;
}
然后将使用a=b=7
调用someFunction
,而不是a=b=5
。如果需要第一个值,则必须在绑定处理程序时复制这些值。像这样:
$(function () {
var a, b;
function bind(a, b) {
$("#Delay").click(function() {
delayCallBack(function() {
someFunction(a,b);
}, 100);
});
}
a = b = 5;
bind(a, b);
a = b = 7;
}
我也遇到了同样的错误:setTimeout调用(参数周围缺少引号?)。 杰拉德·塞克斯顿的解释是正确的 正确的代码应该是
$("#Delay").click(function() {delayCallBack(function(){someFunction(a,b)}, 100);});
我也遇到了同样的错误:setTimeout调用(参数周围缺少引号?)。 杰拉德·塞克斯顿的解释是正确的 正确的代码应该是
$("#Delay").click(function() {delayCallBack(function(){someFunction(a,b)}, 100);});
当您认为正在发送对它的引用时,实际上正在调用
someFunction(a,b)
,这可能不会有什么帮助。。。你实际上是在做什么呢?在a和b定义的范围内发送结果?你得到的确切错误是什么?@JørgenFogh:error I get in firebug“error:无用的setTimeout调用(参数周围缺少引号?)”。范围在功能范围内。所以我不能有a,b。它必须作为论据通过。@Senthilnathan:正如我在回答中所详述的,a和b是可以通过的。但是代码变得相当复杂。当您认为正在发送对它的引用时,实际上正在调用someFunction(a,b)
,这可能对您没有帮助。。。你实际上是在做什么呢?在a和b定义的范围内发送结果?你得到的确切错误是什么?@JørgenFogh:error I get in firebug“error:无用的setTimeout调用(参数周围缺少引号?)”。范围在功能范围内。所以我不能有a,b。它必须作为论据通过。@Senthilnathan:正如我在回答中所详述的,a和b是可以通过的。但是代码变得相当复杂。@Jørgenfough不确定它们是什么,OP可能从a
和b
中得到ReferenceError
,所以我把它们省略了。但是因为他没有说他有什么错误,所以不清楚。@JørgenFogh不确定它们是什么,OP可能从a
和b
中得到ReferenceError
,所以我把它们漏掉了。但因为他没有说他有什么错误,所以还不清楚。