javascript - 使用需要参数的非匿名函数的 setInterval 必须在匿名函数内。为什么?

标签 javascript jquery

好的,我已经在这里和其他地方查看了几篇关于 jquery/javascript 中的 setInterval 的帖子,关于答案的烦人之处在于我没有了解解决方案为何有效。

请考虑:

使用匿名函数,我们可以设置警报以重复输出“兔子”:

setInterval(function(){
  alert("bunnies")
},3000);

但是如果我们想使用一个非匿名函数我们必须编码

setInterval(hop,3000);

其中函数:

function hop(){
    alert("bunnies");
}

如果我们尝试编码:

setInterval(hop(),3000);

hop 只执行一次。我不明白这是为什么。我已经阅读了关于此的各种 SO,这意味着我们需要传递对 setInterval 的引用。这是否意味着第一种形式 setInterval(hop,3000);通过引用传递。如果可以,这可以解释吗?

因此我们有一个问题。显然,希望能够将参数传递给功能跳跃,例如......

setInterval(hop("bunnies"),3000);

其中函数:

function hop(msg){
    alert(msg);
}

这确实会导致 hop 被调用并输出“bunnies”,但该函数再次只被调用一次。

据我所知,将参数传递给由 setInterval 控制的函数的唯一方法是将其合并到匿名函数中:

setInterval(function(){
 hop("bunnies")
},3000);

这会传递参数并重复执行 hop,每 3 秒提醒我们注意兔子(对兔子保持警惕非常重要)。

因此问题:

  1. 这是允许您传入参数的唯一语法吗?
  2. 为什么 setInterval(hop("bunnies"),3000);不工作。

最佳答案

setInterval 需要一个函数 作为第一个参数。当您尝试时:

setInterval(function() {...}, 100);

setInterval(funcName, 100);

您正确地传递了一个函数。

然而,当您尝试 setInterval(funcName(), 100); 时,您实际上是在调用该函数并将其返回值传递给 setInterval 这是不正确的。

关于javascript - 使用需要参数的非匿名函数的 setInterval 必须在匿名函数内。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12895006/

相关文章:

javascript - 如何在 Canvas 上绘制 GIF?

javascript - 为什么我的 Backbone Collection 重置事件没有触发?

javascript - 将数组传递给隐藏输入并检索具有不同索引上的元素的数组

javascript - 在转换(序列化)非表单数据以与 ajax 一起使用的 javascript 中是否有更标准化的方法?

javascript - ItemTpl onclick函数调用extjs 6

javascript - WKWebView 在加载任何 URL 时阻止某些脚本(阻止任何网站中的跟踪或广告)

javascript - 如何访问这个html元素的属性?

php - 如何将错误消息从一个 php 文件检索到另一个 php 文件?

jQuery ajax 从 webapi 2 加载二进制图像

jquery - 垂直对齐 Superslides 中的内容