【问题标题】:to call a javascript function periodically定期调用 javascript 函数
【发布时间】:2010-06-03 11:55:31
【问题描述】:

我想定期调用带有争论的函数。

我试过setTimeout("fnName()",timeinseconds);它正在工作。

但是当我添加一个论点时,它就不起作用了。例如:setTimeout("fnName('arg')",timeinseconds);

【问题讨论】:

  • 没有参数,它应该只是setTimeout(fnName, timeinseconds); 你不能做setTimeout(fnName(), timeinseconds); 因为它现在会调用这个函数。
  • @Matthew Flaschen - 问题中的引号 :)
  • @Nick,我知道。我正在处理@c0mrade 的评论。

标签: javascript ajax function arguments


【解决方案1】:

你可以添加一个匿名函数:

setTimeout(function() { fnName("Arg"); }, 1000);

【讨论】:

  • 值得一提——这叫做“currying”:)
  • @Yonatan 很好,从来没有听说过 :) 你的意思是把调用放到一个匿名函数中吗?
  • setTimeout 不是重复调用函数,而是 setInterval 重复调用
  • 是的,这是一个数学概念。来自维基百科:“currying 是一种转换带有多个参数(或参数的 n 元组)的函数的技术,它可以被称为一个函数链,每个函数都有一个参数。”虽然我想知道当你没有传递任何参数时它是否仍然在currying :)
  • @YonatanKarni:这实际上不是柯里化,而是部分函数应用程序。柯里化是一个不同的概念,柯里化把一个可以称为 f(a,b,c) 的函数变成一个可以称为 f(a)(b)(c) 的函数。
【解决方案2】:

使用匿名函数,如下所示:

setTimeout(function() { fnName('arg'); }, time);

一般来说,从不将字符串传递给setTimeout()setInterval(),如果可以避免的话,除了不好的做法之外,还有其他副作用......例如它运行时你所处的范围。

顺便说一句,如果您不需要参数,那就是:

setTimeout(fnName, time);

【讨论】:

    【解决方案3】:

    setTimeout 接受表达式或 函数名称匿名函数,但不接受 () 运算符。

    () 将立即开始执行函数并导致 setTimeout 接受无效参数。

    【讨论】:

      猜你喜欢
      • 2017-04-06
      • 1970-01-01
      • 2010-11-16
      • 2015-09-25
      • 1970-01-01
      • 2019-07-14
      • 1970-01-01
      • 2019-01-30
      • 1970-01-01
      相关资源
      最近更新 更多