大国工匠普拉斯金 2022-04-02 17:07 采纳率: 75%
浏览 17
已结题

WebSocket一个作用域的小问题


<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>体验websocket</title>
    <style>
      #container {
        width: 500px;
        height: 400px;
        border: 2px dashed #7575e7;
        overflow-y: auto;
      }
    </style>
  </head>
  <body>
    <div id="container"></div>
    <input type="text" id="message" />
    <button onclick="openWS()">建立连接</button>
    <button onclick="sendMessage()">发送消息</button>
    <button onclick="closeWS()">关闭连接</button>

    <script>
      var dom = document.getElementById('container')
      var inputDom = document.getElementById('message')
      var isOpen = false
      var ws

      var openWS = function () {
        ws = new WebSocket('wss://echo.websocket.org')
        ws.onopen = function (event) {
          isOpen = true
          dom.innerHTML = dom.innerHTML + `<p>与服务器成功建立连接</p>`
        }
        ws.onmessage = function (event) {
          dom.innerHTML =
            dom.innerHTML + `<p style='color: blue'>服务器说:${event.data}</p>`
        }
        ws.onclose = function () {
          isOpen = false
          dom.innerHTML = dom.innerHTML + `<p>与服务器连接关闭</p>`
        }
      }
      var sendMessage = function () {
        if (inputDom.value && isOpen) {
          ws.send(inputDom.value)
          dom.innerHTML =
            dom.innerHTML + `<p style='color: red'>我说:${inputDom.value}</p>`
          inputDom.value = ''
        }
      }
      var closeWS = function () {
        ws.close()
      }
    </script>
  </body>
</html>

上面是业务代码,我的提问是为什么ws这个变量在 sendMessage和closeWS这两个函数中 依然能得到 ws是websocket这个实例呢?明明和上面的openWS函数不在一个作用域里面啊,这是为什么呢?

  • 写回答

1条回答 默认 最新

  • 帅杰!!! 2022-04-02 17:12
    关注

    你仔细看下你申明得变量ws 在函数外面 是一个全局变量 so 它在函数里肯定能得到

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 4月2日
  • 已采纳回答 4月2日
  • 创建了问题 4月2日

悬赏问题

  • ¥15 js调用html页面需要隐藏某个按钮
  • ¥15 ads仿真结果在圆图上是怎么读数的
  • ¥20 Cotex M3的调试和程序执行方式是什么样的?
  • ¥15 一道python难题3
  • ¥15 牛顿斯科特系数表表示
  • ¥15 arduino 步进电机
  • ¥20 程序进入HardFault_Handler
  • ¥15 oracle集群安装出bug
  • ¥15 关于#python#的问题:自动化测试
  • ¥20 问题请教!vue项目关于Nginx配置nonce安全策略的问题