当前位置: 首页 > 知识库问答 >
问题:

谁能解释一下下面的代码吗

娄森
2023-03-14

我对javascript还是个新手,只知道基本知识。有人能解释一下下面的代码,就像在调用init函数时发生的流中一样吗?

我对下面代码的理解是,一旦调用init函数,就会设置一个全局变量输出,该输出映射到一个带有id输出的HTML元素。然后调用TestWebSocket javascript函数。这将创建一个WebSocket对象。这之后是我不完全理解的部分。

WebSocket.open=function(evt){onOpen(evt)};行中,WebSocket对象有一个名为open的属性,我们将它设置为任何返回的属性

函数(evt){onOpen(evt)};

这反过来调用onOpen javascript函数。

function onOpen(evt)  {
   writeToScreen("CONNECTED");doSend("WebSocket rocks");
}
function doSend(message) {
   writeToScreen("SENT: " + message);websocket.send(message);
} 

所以我的第一个问题是在WebSocket对象(webSocket.open)中设置了什么?

第二个问题:

下面是TestWebSocket()javascript函数的执行顺序。

websocket = new WebSocket(wsUri);        
websocket.onopen = function(evt) { 
  onOpen(evt) 
};
websocket.onclose = function(evt) { 
  onClose(evt) 
}; 
websocket.onmessage = function(evt) {
  onMessage(evt) 
};
websocket.onerror = function(evt) {
  onError(evt) 
};

因此,我的问题是,即使websocket对象(websocket)open、close、onmessage、onerror的属性正在设置,并且在每个属性中,我都调用了writeToScreen函数,为什么没有设置这些属性,以及testWebSocket()javascript函数上发生了什么。

function init() {
    output = document.getElementById("output");
    testWebSocket();
}

function testWebSocket() {
    websocket = new WebSocket(wsUri);
    websocket.onopen = function(evt) {
        onOpen(evt)
    };
    websocket.onclose = function(evt) {
        onClose(evt)
    };
    websocket.onmessage = function(evt) {
        onMessage(evt)
    };
    websocket.onerror = function(evt) {
        onError(evt)
    };
}

function onOpen(evt) {
    writeToScreen("CONNECTED");
    doSend("WebSocket rocks");
}

function onClose(evt) {
    writeToScreen("DISCONNECTED");
}

function onMessage(evt) {
    writeToScreen('<span style="color: blue;">RESPONSE: ' + evt.data + '</span>');
    websocket.close();
}

function onError(evt) {
    writeToScreen('<span style="color: red;">ERROR:</span> ' + evt.data);
}

function doSend(message) {
    writeToScreen("SENT: " + message);
    websocket.send(message);
}

function writeToScreen(message) {
    var pre = document.createElement("p");
    pre.style.wordWrap = "break-word";
    pre.innerHTML = message;
    output.appendChild(pre);
}

共有1个答案

米承嗣
2023-03-14

您正在查看事件处理程序。

TestWebSocket函数尝试创建到WSURI的WebSocket连接。

一旦成功打开该连接,就会调用onopen函数。每当WebSocket连接接收到消息时,就会调用onMessage函数,一旦连接关闭,就会执行onClose

您可能只看到正在显示的错误,因为连接无法建立,因此,onerror是唯一被调用的东西。

 类似资料:
  • 这是我从骡子3到骡子4转换的第一个项目。我与mule4一起工作,但在Mule3是新的。有谁能帮帮我吗?你能告诉我这些自定义处理器和变压器在这个mule3代码中的用途吗?而Mule4中的等价代码会是什么呢?在骡子4中没有像这样的自定义变压器。请帮帮我..

  • 我不太理解while循环中的条件,以及它代表什么'>>>='。

  • 我在计算这条线的时间复杂度时遇到了麻烦。在我看来是二次O(n**2)。因为如果不使用列表理解,这里必须经过嵌套循环。

  • 问题内容: 我是新手。我在宁静的api调用中看到了检查诺言的信息。 被用来保留promise对象。我读了诺言,但一无所获。尽管我可以不带api进行api调用,但是在文章中的某处使用了它。 所以我想知道在没有的情况下进行api调用的确切用法和区别。 请帮助。谢谢 问题答案: 我认为我写的有关$ q的文章可能会对您有所帮助。 $ q简介 $ q是角度定义的服务。与新的Promise()相同。但是$ q

  • 本文向大家介绍解释下如下代码的意图:Array.prototype.slice.apply(arguments)相关面试题,主要包含被问及解释下如下代码的意图:Array.prototype.slice.apply(arguments)时的应答技巧和注意事项,需要的朋友参考一下 为类数组对象,并不是真正的数组。 可以实现数组的浅拷贝 由于 不是真正的数组,所以没有方法,通过可以调用数组对象的sli

  • 问题内容: 问题答案: 作用 在你的Chrome浏览器的控制台中输入这段代码,你会发现不同HTML层都被使用不同的颜色添加了一个高亮的边框。是不是非常酷?但是,简单来说,这段代码只是首先获取了所有的页面元素,然后使用一个不同的颜色为它们添加了一个1px的边框。 解析 => 调用引用数组的forEach方法 => => => 对二进数1小数点右移24位 => 获得了一个位于之间的随机整数,也就是随机