【发布时间】:2014-10-17 06:36:50
【问题描述】:
我想知道下面显示的顺序是如何发生的。
这里是有问题的函数:
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 行开始。
2。 Step In,前进到第 33 行。
3。再次 Step In,前进到第 34 行。
4。再进一次,前进到第 36 行???
--> 怎么可能直接控制从if块的最后一行到else块的第一行?
一些重要的事实:
- 这里没有遗漏的步骤。
- 这真的发生了。
- 我只从一个地方打电话给
sendMessage,当那个电话发生时我正在记录。日志中没有未说明的sendMessage调用,所以我不认为异步是一种解释。 - 我也用 Firebug 调试器尝试了同样的事情,同样疯狂的事情发生了。
编辑/跟进
如果我在 else 块的第一行添加一个 console.log 语句(将警报下推到第 37 行),控件将从第 34 行直接转到第 37 行(跳过 console.log 语句)。
另外,我应该提到的是,实际上从未出现任何警报,即使直接进入该代码也是如此。
编辑 2
这是sendMessage函数的间距和CRLF:
【问题讨论】:
-
您的代码在您的问题、IDE 和 firefox 调试器中的格式是否与换行符完全相同?也许这是一个错误,与代码在调试器中显示的方式与在 VM 中加载的方式不同,并且行号不对应......
-
@reverse_engineer,谢谢,但情况似乎并非如此。我确保代码已格式化并重新测试,但调试器仍然做同样的事情。我还检查了 MS Word 中的文本以查看空格和换行符 (CRLF),但它们似乎都是正确的(请参阅我的问题中的编辑 2)。
-
我刚刚看到几乎完全相同的东西,当该行导致异常时。在例外情况下,它似乎显示得好像它要去别的地方。很奇怪。
标签: javascript firefox firebug javascript-debugger firefox-developer-tools