【问题标题】:a function that only calls input function f every 50 milliseconds每 50 毫秒仅调用一次输入函数 f 的函数
【发布时间】:2018-06-17 00:21:51
【问题描述】:
  • 我是 js 新手。
  • 我正在尝试创建一个仅每 50 毫秒调用一次输入函数 f 的函数。
  • 使用 setTimeout 在小提琴中编写了代码。
  • 但并没有完全按照我的意愿去做
  • 你能告诉我如何解决它吗?
  • 在下面提供代码

https://jsfiddle.net/1pqznbgt/

function callSeconds(f){
    setTimeout(function(){
        alert("testing");
    }, 500)
}

【问题讨论】:

  • 尝试将 setTimeout 更改为 setInterval。也使用 50 而不是 500
  • "但它没有执行。"我的意思是……是的,是吗?单击按钮,然后在指定时间后出现警报。你的意思是它并没有完全按照你的意愿去做吗?它肯定被调用了。
  • @KevinB 感谢您的回复...是的,它并没有完全按照我的意愿行事...您可以在我的代码中更新

标签: javascript jquery html css function


【解决方案1】:

我看到的问题是每次调用 alert() 时都会停止 JavaScript 的执行,并且每个浏览器都可以以不同的方式实现警报。 setTimeout() 只执行一次,因此如果您调用该函数,它将等待 500 毫秒并发出警报,如果您希望一段代码连续运行,您必须使用 setInterval() 函数,但您仍然存在浏览器如何选择的问题处理 alert() 函数,通常警报会暂停当前代码的执行,我不知道这对定时执行函数有什么影响。我会尝试在不暂停或停止脚本执行的情况下执行。我还注意到,在代码段中,您没有调用将调用 setTimeout 函数的父函数。

【讨论】:

    【解决方案2】:

    您可以在这里做两件事之一。 首先,不要使用setTimeout。 请改用setInterval (f,50)

    或者像这样递归调用函数:

    function foo (f){
        f();
        setTimeout (foo,50);
    }
    

    【讨论】:

      【解决方案3】:
      • 您正在寻找setInterval 而不是setTimeoutsetTimeout 将执行一次,setInterval 将执行一次)
      • 样本中的 500 表示 500 毫秒而不是 50 毫秒
      • 您需要调用 f 而不是匿名函数,因此:

      你正在寻找的是这样的:

      function callSeconds(f){
          setInterval(f, 50);
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-11-06
        • 2011-03-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-05-17
        • 2018-02-16
        相关资源
        最近更新 更多