当我像这样查看JS代码时:

        socket = new WebSocket(server);

        socket.onopen = function (evt)
        {
                // STUFF
        };


我总是有点困惑。如果您用任何其他语言编写了类似的内容,则在已建立与onopen的连接之后,很有可能将server事件处理程序绑定到该事件处理程序,从而使您错过onopen事件。即使第一行是由Javascript解释器异步执行的,在第二行上仍然有太晚的可能性。

为什么上面的代码为什么在Javascript中运行良好,而在C#中(例如)却应写为:

        WebSocket socket = new WebSocket();

        socket.onopen = new EventHandler<EventArgs>(Open);

        socket.Connect(server);

最佳答案

与大多数其他语言不同,JavaScript严格是单线程的。
当您的代码运行时,其他任何事情都不会发生。

在控制返回事件循环之前(该代码的同步部分完成之后),onopen无法触发。

请注意,这是真的,因为onopen是为响应异步事件(在这种情况下为套接字)而触发的。
如果同步提出,那将不是事实。为解决此问题,同步引发与此模式一起使用的事件的代码应在process.nextTick中异步引发事件。

关于javascript - 什么时候执行Javascript事件?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16905035/

10-17 02:38