自定义jQuery延迟回调

时间:2010-07-21 22:36:27

标签: jquery callback delay

我正在使用具有两个参数的函数扩展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);

2 个答案:

答案 0 :(得分:2)

回调未定义,因为您将其作为字符串传递。这样做:

setTimeout(callback, msec);

答案 1 :(得分:2)

@Jason已经说过如何正确调用回调。

  

为什么回调函数在setTimeout中未定义?

评估"callback()"时,您调用setTimeoutdelay)的函数已完成。该字符串在全局范围内进行评估,其中函数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);
})();