在setTimeout中调用多个函数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在setTimeout中调用多个函数相关的知识,希望对你有一定的参考价值。

我想在javascript中的一个setTimeout()末尾调用两个函数。是否有可能,如果“是”哪一个将首先执行?

setTimeout(function() {
    playmp3(nextpage);
    $.mobile.changePage($('#' + nextpage));
}, playTime);
答案

可能吗?

是的,为什么不呢? setTimeout采用回调函数作为第一个参数。事实上它是一个回调函数并没有改变任何东西;通常的规则适用。

哪一个会先被执行?

除非您使用基于Promise或基于回调的代码,否则Javascript会按顺序运行,因此您的函数将按照您记下的顺序调用。

setTimeout(function() {
  function1() // runs first
  function2() // runs second
}, 1000)

但是,如果你这样做:

setTimeout(function() {
  // after 1000ms, call the `setTimeout` callback
  // In the meantime, continue executing code below
  setTimeout(function() {
    function1() //runs second after 1100ms
  },100)

  function2() //runs first, after 1000ms
},1000)

然后订单改变,因为setTimeout是异步的,在这种情况下它会在计时器到期后被解雇(JS继续并在此期间执行function2()


如果您对上面的代码有疑问,那么您的任何一个函数都包含异步代码(setInterval()setTimeout(),DOM事件,WebWorker代码等),这会让您感到困惑。

  • async here代表不按特定顺序发生的异步意义
另一答案

我已经使用了这种语法,它工作正常:

$('#element').on('keypress change', function (e) {
   setTimeout(function () { function1(); function2(); }, 500, $(this));
});

以上是关于在setTimeout中调用多个函数的主要内容,如果未能解决你的问题,请参考以下文章

如何让片段中的多个视图调用片段类中声明的相同 onClick 函数?

关于setTimeout的妙用

setTimeout中所执行函数中的this,永远指向window

js 里的 settimeout函数

为啥框架集中两个子页面不能同时运行settimeout或者setInterval函数

setTimeout()