var repro_bug = () => {
var state = { x: 1, y: 1 };
return () => {
var toggle = () => {
state.y = 1;
console.log(state.x);
};
// console.log();
state.x = state.y;
state.y = 0;
toggle();
};
};
var run = repro_bug();
Run Code Online (Sandbox Code Playgroud)
如果你打电话run(),它应该总是记录1。在 Chrome 91.0.4472.114(在 Chrome OS 91.13904.0 上)上,当我调用run()十次左右时,它会开始记录0。
奇怪的是,如果您取消注释第 11 行(空白) console.log,它就会按预期工作。这让我相信这是 Chrome 中的一个错误,可能涉及某种无序执行。这个例子是我能得到的最短的例子,单独的toggle函数和对象state(而不是两个变量)都是它表现奇怪的必要条件。
请注意,您需要run()手动执行最终操作(如下面的屏幕截图所示)才能重现。这可能在某种程度上与时间有关。
无法在 …