自定义jQuery延迟回调
我正在使用一个具有两个参数的函数扩展jQuery:回调函数和超时。我使用的是1.4版之前的版本,所以没有内置.delay(),但即使这样,我也不想这样做 我从以下内容开始,但不清楚具体内容 1为什么在setTimeout中未定义回调函数,以及 2如果可能的话,我应该怎么称呼它自定义jQuery延迟回调,jquery,callback,delay,Jquery,Callback,Delay,我正在使用一个具有两个参数的函数扩展jQuery:回调函数和超时。我使用的是1.4版之前的版本,所以没有内置.delay(),但即使这样,我也不想这样做 我从以下内容开始,但不清楚具体内容 1为什么在setTimeout中未定义回调函数,以及 2如果可能的话,我应该怎么称呼它 $.extend({ delay: function(callback, msec) { alert(callback); // as expected alert(msec);
$.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);
回调未定义,因为您将其作为字符串传递。这样做:
setTimeout(callback, msec);
回调未定义,因为您将其作为字符串传递。这样做:
setTimeout(callback, msec);
@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);
})();
@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);
})();