Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
自定义jQuery延迟回调_Jquery_Callback_Delay - Fatal编程技术网

自定义jQuery延迟回调

自定义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);

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

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

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);
})();