javascript - 如何暂停 JavaScript 中的函数?

标签 javascript settimeout cleartimeout

<分区>

我在 JavaScript 中有一个很长的函数,我将在某些时候暂停它。我知道我可以使用 setTimeout(myFunction, 100)clearTimeout() 来做到这一点。但是,据我所知,在使用 setTimeout(myFunction, 100) 之后,我的函数将在 100 毫秒后从第一行开始执行,此后每 100 毫秒执行一次。我想知道我是否可以在第 50 行暂停我的函数,然后在第 51 行之后立即恢复它。这可能吗?

最佳答案

这是一种方法。确保在外部函数中声明了您始终需要作用域的所有变量。由于 Javascript 作用域规则,它们可以在每个子函数中访问。

function paused() {
  // Define variables you'll need throughout the function.
  var var1, var2, var3;

  // First part of the function
  function part1() {
    // 50 lines
  }

  // Second part of the function
  function part2() {
    // 50 lines
  }

  setTimeout(part1, 0);
  setTimeout(part2, 100);
}

假设有很多部分,超时甚至可以放在一个循环中:

function paused() {
  // Define variables you'll need throughout the function.
  var var1, var2, var3;

  // All function parts.
  var parts = [
    function() {
      // 50 lines
    },
    function() {
      // 50 lines
    },
    function() {
      // 50 lines
    }
    // More?
  ];

  for (var i = 0; i < parts.length; i++) {
    setTimeout(parts[i], i * 100);
  }
}

确保谨慎使用 this,因为内部函数会重新绑定(bind)它。

请注意,由于 Javascript 事件队列的工作方式,全局函数将始终按顺序执行暂停的部分,无论每个部分是否花费超过 100 毫秒。当事件队列发现多个 setTimeout 有资格同时执行时,先排队的优先。

关于javascript - 如何暂停 JavaScript 中的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26446688/

相关文章:

javascript - 荷兰邮政编码的正则表达式

javascript - 使用 PEG 解析器进行 BBCode 解析 : pegjs or . .. 什么?

javascript - settimeout 没有被调用?

javascript - 如何延迟带参数的函数?

javascript - 限制页面上的点击检测 [javascript]

javascript - Android不会清除时间间隔

javascript - 如何使clearTimeout正常工作以取消(中断)setTimeout循环?

javascript - UIAutomation [UITextField resignFirstResponder]

javascript - 如何使用 Angular 更新 ng-repeat 中的列表?

javascript - 在 Javascript 的 for 循环中重置同一计时器的超时