JavaScript setInterval 函数可能有参数,也可能没有参数

标签 javascript function

我正在研究一个简单的高阶函数,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/

相关文章:

javascript - Highcharts:为什么点事件在这里不起作用?

iPad 上的 JavaScript 弹出窗口

javascript - Backbone.js 应用程序能否逐步增强并可被搜索引擎抓取?

javascript - 根据里面的内容使 iframe 高度动态化 - JQUERY/Javascript

javascript - 尝试使用表单重置()函数重置输入字段但不起作用

r - 如果 3 个对象的长度相同,则 R 函数返回 TRUE

Python ttk.Button -命令,无需按下按钮即可运行

javascript - 页面底部的滚动位置

r - 使用 sapply 或 lapply 在向量或列表上按元素应用函数会失败

python - 如何打印出 Python 函数需要/允许哪些参数?