gpt4 book ai didi

javascript - Firefox 调试器从 if block 直接跳转到 else block

转载 作者:搜寻专家 更新时间:2023-11-01 04:16:40 26 4
gpt4 key购买 nike

我想知道下面显示的序列是如何发生的。

这里是有问题的函数:

WebSocketConnector.prototype.sendMessage = function(message) {
if (socket !== null) {
socket.send(message);
console.log('Sent: ' + message);
} else {
alert('Failed to send message. WebSocket connection not established.');
}
};

下面是我调试对此函数的调用时发生的情况:

1。从第 32 行开始。

if condition

2。 Step In,前进到第 33 行。

first line of if block

3。再次进入,前进到第 34 行。

second line of if block

4。再一步一步,前进到第36行???

first line of else block

--> 控制怎么可能直接从 if block 的最后一行到 else block 的第一行?

一些重要的事实:

  1. 这里没有遗漏的步骤。
  2. 这真的发生了。
  3. 我只从一个地方调用 sendMessage,并且在该调用发生时进行记录。日志中没有未说明的 sendMessage 调用,所以我不认为异步是一种解释。
  4. 我也用 Firebug 调试器尝试过同样的事情,同样疯狂的事情发生了。

编辑/跟进

如果我将 console.log 语句添加到 else block 的第一行(将警报下推到第 37 行),控件将从第 34 行直接转到第 37 行(跳过 console.log 语句)。

此外,我应该提到的是,即使直接进入该代码,实际上也不会出现任何警报。

编辑2

这是 sendMessage 函数的间距和 CRLF:

enter image description here

最佳答案

这是因为调试器在返回调用堆栈帧之前步进到最后一个可执行行。在您的例子中,这是包含 alert() 函数的第 36 行。如果调试器跳转到函数的右大括号,即第 38 行,会更清楚。

已经有报告要改变这种行为:

https://bugzil.la/1013219

关于javascript - Firefox 调试器从 if block 直接跳转到 else block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26419249/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com