有人可以解释这种JavaScript行为吗?

时间:2019-09-26 15:33:03

标签: javascript dom

这是我遇到的一种奇怪的javascript行为。目前,我只是在尝试使用该语言,除了了解javascript在幕后的工作方式之外,不尝试从此示例中获得任何收益。所以让我解释一下。我有一个var声明并初始化为Window级别(全局)的字符串,还有一个包含while真实循环语句的函数。在循环内部,有一个条件,如果计算结果为true,则会破坏循环。条件是x变为5。最后,有一个超时的自调用函数,该函数将在几毫秒后将x设置为5,并在窗口级别声明它。问题是,即使x已被设置为5,循环也会进入无穷大。假设调用了超时函数并返回了该函数。请记住,x是全局的,也就是说,它对所有函数都是可见的。

我执行此代码的方式是在刷新页面后立即调用循环函数。超时功能将在10秒钟后在内部运行代码,这有足够的时间运行循环。我所期望的是,在超时功能将全局变量设置为5之后,while真正的循环将中断。尽管我的期望在这里是不正确的,而这正是我要阐明的。预先感谢您抽出宝贵时间来研究此问题。

var x = "init";

//run after 10s
setTimeout(
  (setX = () => {
    x = 5;
    console.log(x);
  }),

  10000
);

// I am calling this function manually from the console
function loopFunc() {
  while (true) {
    //continue looping until x = 5

    if (x === 5) {
      break;
    }
  }

  console.log(x);
}

0 个答案:

没有答案