javascript - 内部函数使用 setTimeout 调用父函数

标签 javascript jquery settimeout

内部函数如何在过期后调用父函数?

setTimeout(main, 2000);
function main(){
    /* .... code */
    setTimeout(console.log("hello after 5 seconds"), 5000);
}

预期的操作是在 5 秒内打印 hello after 5 Seconds(总共 7 秒);使用上面的代码,它会在 2 秒内打印出来。

最佳答案

您需要传递setTimeout函数引用。使用 setTimeout(console.log("hello after 5秒"), 5000);,您可以console.log立即调用。每当您在函数名称后写入 () 时,您都在调用它。

console.log 返回未定义,这是传递给setTimeout 的内容。它只是忽略未定义值并且不执行任何操作。 (并且它不会抛出任何错误。)

如果您需要将参数传递给回调函数,可以采用几种不同的方法。

匿名函数:

setTimeout(function() {
    console.log('...');
}, 5000);

返回一个函数:

function logger(msg) {
    return function() {
        console.log(msg);
    }
}

// now, whenever you need to do a setTimeout...
setTimeout(logger('...'), 5000);

这是有效的,因为调用 logger 只是返回一个新的匿名函数,该函数通过 msg 关闭。返回的函数是实际传递给 setTimeout 的函数,当回调被触发时,它可以通过闭包访问 msg

关于javascript - 内部函数使用 setTimeout 调用父函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11762573/

相关文章:

javascript - 如何使CSS圆形微调器的前缘半月形

javascript - 使用 jQuery 选择具有特定类的第一个和最后一个元素

jquery - Angular `$.ajax` 可以工作,但 '$resource` - 抛出错误如何解决这个问题?

java - Java 小程序和网页上的文本输入控件之间的桥梁

reactjs - react 链接到按钮超时

jquery - 如何在 "X"秒后调用 jquery 函数

javascript - 如何停止 JavaScript 中的异步函数?

Javascript 在 .this Click 上交换图像

javascript - 在没有 Date 对象的情况下在 Javascript 中操作日期

javascript - $.ajaxFileUpload 成功将文件上传到文件夹,但无法传递要保存在数据库中的值