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

时间:2015-07-09 19:30:02

标签: javascript google-chrome type-conversion google-chrome-devtools

所以我有这段代码:

update
        price_watches pw
      set
        min_percent_changed = calc.delta
      from
        (select
          id,
          product_id,
          calculation_date,
          (1 - (price_min / lag(price_min) over (order by product_id, calculation_date))) * 100 as delta
        from
          price_watches
        where
          price_min > 0) calc
      where
        calc.id = pw.id;

现在无论出于何种原因(在这种情况下我发生了一些我并不熟悉的类型强制)布尔表达式与增量运算符相结合,将 a 增加1。

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

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

1 个答案:

答案 0 :(得分:0)

就像现在一样,您已暂停针对该代码运行的VM。你暂停了时间,正在看着状态。通过突出显示您正在该状态下执行该代码的操作,以查看它将如何评估。然后,因为这就是这个代码所做的事情,a成为VM中执行的结果。这样做会导致执行再次发生。然后,在执行中前进时,你刚刚暂停的状态就会被拉开。

对于为什么系统正在运行,这是一个直截了当的答案。

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