插入空白 console.log() 调用时行为发生变化

Red*_*ams 5 javascript google-chrome

代码

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()手动执行最终操作(如下面的屏幕截图所示)才能重现。这可能在某种程度上与时间有关。

无法在 Node 中重现,其他人也无法在 Firefox 上重现。

截图

未注释(预期行为):

未注释:第 1-11 次运行记录 1

评论:

评论:第 1-10 次运行记录 1,第 11 次运行记录 0