为什么在 Chrome DevTools 下 setTimeout() 会弄乱我的调用堆栈?

rka*_*rer 6 javascript google-chrome-devtools

我有一个函数,完成后用 setTimeout() 重新排队。有人可以解释为什么 Chrome DevTools 让它看起来像是在递归调用自己吗?我的理解是每次调用都应该清楚调用堆栈。

以这个非常简单的例子为例:

<html>
  <head>
    <script>
      function main() {
        setTimeout(main, 100);  // set breakpoint here
      }
      main();
    </script>
  </head>
  <body></body>
</html>
Run Code Online (Sandbox Code Playgroud)

第一次断点被击中时,我看到了这个:

堆栈上的一个主要

经过 3 次迭代后,我看到了这一点:

堆栈上的三个主要

Firefox 开发人员工具按照我的预期执行,每次遇到断点时只在堆栈上显示该函数的一个实例。

在此处输入图片说明

在 Chrome 下是否有某种我不知道的微妙参考捕获,或者这只是 DevTools UI 的事情?

Bsa*_*lex 8

要隐藏它 - 转到
Devtools Settings -> Preferences -> Debugger
Check "Disable async stack traces"
但我强烈建议保持原样。这对于调试非常有用。