【问题标题】:Javascript function call stack for the below code以下代码的 Javascript 函数调用堆栈
【发布时间】:2022-11-22 10:20:55
【问题描述】:
(function timer() {
  for (var i = 0; i <= 5; i++) {
    (function () {
      setTimeout(function clog() {
        console.log(i);
      }, i * 1000);
    })();
  }
})();

这是输出-

6
6
6
6
6
6

IIF 是如何加载到堆栈中的?是否所有这些都被推入然后处理并一个一个弹出以获得 i = 6? 打印 6 时输出确实等待 1 秒。

【问题讨论】:

  • 你没有用你的调试器亲眼看看吗?
  • setTimeout() 回调不在堆栈中。它们在运行时管理的队列中。除了计时器触发时的回调之外,堆栈基本上是空的。

标签: javascript


【解决方案1】:

var会让它成为一个全局变量,为了让它像你预期的那样工作,需要改变

var i = 0; i <= 5; i++

let i = 0; i <= 5; i++

(function timer() {
  for (let i = 0; i <= 5; i++) {
    (function () {
      setTimeout(function clog() {
        console.log(i);
      }, i * 1000);
    })();
  }
})();

【讨论】:

    猜你喜欢
    • 2019-11-22
    • 2011-11-12
    • 1970-01-01
    • 2021-03-16
    • 1970-01-01
    • 2011-12-04
    • 2014-11-13
    • 1970-01-01
    • 2019-03-02
    相关资源
    最近更新 更多