内部函数如何在过期后调用父函数?
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/