为什么悬停在Chrome调试器实际上修改变量,而不是评估表达式

Why does hovering in the Chrome debugger actually modify variables rather than evaluating an expression?

本文关键字:表达式 评估 变量 修改 悬停 Chrome 调试器 实际上 为什么      更新时间:2023-09-26

所以我有这个代码:

var a = 3;
debugger;
console.log(a += a > 2)

现在不管出于什么原因(在这种情况下发生了某种类型强制转换,我不太熟悉),布尔表达式与增量运算符结合将a增加1。

然而,当我在chrome调试器中悬停(a += a>3)时,它实际上会运行该操作。如果我把鼠标悬停在那部分上5次,它就会运行那个操作5次。而不是正常的运行时给出的输出4,我将得到8,只是因为我在它上面徘徊了五次。

为什么不只运行一次操作,然后检查这个奇异操作的结果值呢?如果我将代码块悬停1000次,它不应该只输出该代码块的结果,就好像它只运行一次一样吗?

现在,您已经暂停了针对该代码运行的VM。你暂停了时间,看到的是现在的状态。通过高亮显示您在该状态下执行的代码的操作,以查看它将如何计算。然后,因为这就是这段代码的作用,a成为了VM内执行的结果。只要您再次执行,就会多次执行此操作。然后在执行中向前迈进时,您刚刚暂停的相同状态被向前拉。

希望这是一个关于为什么系统是这样运行的直接答案。

至于为什么添加1,Johan关于true被转换为1的评论是正确的。这是JavaScript弱类型系统的一部分