这是我遇到的一种奇怪的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);
}