我正在使用具有两个参数的函数扩展jQuery:回调函数和超时。我在1.4之前,所以我没有.delay()内置,但即使这不是我想要的。
我从下面开始,但不清楚
1为什么回调函数在setTimeout和
中未定义2 应该我应该如何调用它?
$.extend({
delay: function(callback, msec) {
alert(callback); // as expected
alert(msec); // as expected
if(typeof callback == 'function'){
setTimeout("callback()", msec); // why callback() undefined here?!
}
}
});
//Usage:
$.delay(function(){
alert("this is delayed 5sec");
}, 5000);
答案 0 :(得分:2)
回调未定义,因为您将其作为字符串传递。这样做:
setTimeout(callback, msec);
答案 1 :(得分:2)
@Jason已经说过如何正确调用回调。
为什么回调函数在setTimeout中未定义?
评估"callback()"
时,您调用setTimeout
(delay
)的函数已完成。该字符串在全局范围内进行评估,其中函数callback
不存在(我认为总是在全局范围内进行评估)。
示例:
function a() {
alert('a');
}
(function() {
function a() {
alert('b');
}
setTimeout('a()', 1000);
})();
会提醒a
。
如果你创建一个闭包并在匿名函数中评估a()
,它会提醒b
:
function a() {
alert('a');
}
(function() {
function a() {
alert('b');
}
setTimeout(function() {eval('a()');}, 1000);
})();