我想知道下面展示的序列是如何可能发生的。
以下是相关函数:
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. 单步进入,执行到第33行。
3. 再次单步进入,执行到第34行。
4. 再次单步进入,居然直接跳到第36行???
--> 怎么可能会出现从if块的最后一行直接跳到else块的第一行的情况呢?
以下是一些重要的事实:
- 这里没有漏掉任何步骤。
- 这确实发生了。
- 我只从一个地方调用了
sendMessage
,并且记录了调用发生的时间。日志中没有未解释的sendMessage
调用,因此我不相信异步是一个解释。 - 我还使用Firebug调试器尝试了同样的操作,结果也是一样的。
编辑/后续
如果我在else块的第一行添加一个console.log语句(将alert推迟到第37行),控制流就会从第34行直接跳到第37行(跳过console.log语句)。
另外,我应该提到的是,即使直接进入那段代码,也不会出现任何警报。
编辑2
以下是sendMessage
函数的空格和CRLF: