我正在研究一个简单的高阶函数,delay
,这将调用函数参数 func
,然后延迟传入的时间量 wait
。我已经阅读了有关在哪里输入参数的其他答案,但我找到的答案都没有准确解决我需要学习的内容:我应该在哪里以及如何允许可能会或可能不会传递给 func
的参数。 ?
原始说明:“在等待毫秒后调用 func。调用 func 时会向 func 提供任何其他参数。”
这是基本的开始:
function delay(func, wait) {
setInterval(func, wait);
}
关于 SO 的另一个答案指出,可以使用匿名函数来包装 func
参数,以便可以将参数传递到那里,但我还没有成功构建它。
非常感谢指导。
最佳答案
听起来您需要使用arguments
伪数组和Function#apply
:
function delay(func, wait) {
// get all arguments after the first two
var args = Array.prototype.slice.call(arguments, 2);
setTimeout(function() {
func.apply(null, args);
}, wait);
}
示例:
function delay(func, wait) {
var args = Array.prototype.slice.call(arguments, 2);
setTimeout(function() {
func.apply(null, args);
}, wait);
}
function outputPerson(firstName, lastName) {
console.log("Hello, " + firstName + " " + lastName);
}
delay(outputPerson, 3000, "John", "Doe");
编辑:正如帕特里克·埃文斯和我在评论中指出的那样,setTimeout
已经提供了此处描述的功能(只要您不使用 IE <10)。因此,您甚至可以像这样定义您的 delay
函数:
var delay = setTimeout;
关于JavaScript setInterval 函数可能有参数,也可能没有参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37501894/