Javascript 是否有必要保护闭包内对象的生存期

Javascript 是否有必要保护闭包内对象的生存期,javascript,node.js,socket.io,Javascript,Node.js,Socket.io,以下代码将创建2个客户端并连接到服务器。socket变量的生存期预计将持续到程序结束。虽然代码运行良好,但我只是想知道,是否有必要将闭包内部的socket变量添加到闭包外部的数组或某个容器中,以保护socket的生存期 var usernames = []; usernames.push('tom'); usernames.push('bob'); usernames.forEach(function (username) { var socket = require('socket

以下代码将创建2个客户端并连接到服务器。socket变量的生存期预计将持续到程序结束。虽然代码运行良好,但我只是想知道,是否有必要将闭包内部的socket变量添加到闭包外部的数组或某个容器中,以保护socket的生存期

var usernames = [];
usernames.push('tom');
usernames.push('bob');

usernames.forEach(function (username) {

    var socket = require('socket.io-client')('http://localhost:3000', {'forceNew': true});

    socket.emit('loaded', {username: username});
}
发件人:

如果存在为打开事件、消息事件、错误事件或关闭事件注册的任何事件侦听器,则在事件循环上次开始执行任务时,其readyState属性值设置为CONNECTING(0)的WebSocket对象不得被垃圾回收

如果存在为消息事件、错误事件或关闭事件注册的任何事件侦听器,则不得对其readyState属性的值在事件循环上次开始执行任务时设置为OPEN(1)或CLOSING(2)的WebSocket对象进行垃圾回收

具有已建立连接的WebSocket对象(其数据已排队等待传输到网络)不得进行垃圾收集。[WSP]

如果WebSocket对象在其连接仍处于打开状态时被垃圾收集,则用户代理必须关闭WebSocket连接。[WSP]


它不保护套接字的生命周期,只保护访问它的能力。套接字将一直保持打开状态,但如果不公开它,则无法访问。javascript如何知道“只要”的长度。这是否意味着节点根据WebSocket对套接字对象进行特殊例外。区分套接字的连接、套接字的对象和对象的句柄。你是否想保留手柄取决于你的需要;可以将规范看作是对浏览器的寻址,而不是对您。它说的是“如果有事件侦听器、打开的连接等,不要进行垃圾收集”。但是obv浏览器并不总是实现建议,所以您可能需要测试一下。