javascript - 如何维护对正确对象的引用?

标签 javascript node.js reference socket.io

我有这样的代码:

for (var index = 1; index < args.length; index++) {
    var shell = args[index];
    listener.of('/' + shell.namespace || 'shotgun')
        .on('connection', function (socket) {
            socket.on('execute', function (cmdStr, context, options) {
                console.log('Received: ' + cmdStr);
                var result = shell.execute(cmdStr, context, options);
                socket.emit('result', result);
            });
        });
}

我正在使用socket.io我正在创建多个 namespace 。 socket.io 命名空间运行良好,但在 execute 回调中,对 shell 的引用始终是 for 循环中创建的最后一个对象。我需要循环的每次迭代来保持对该迭代中 shell 的引用。

最佳答案

好吧,最终的答案是使用 let (ECMAScript 6 或 node --harmony ):

for (let index = 1; index < args.length; index++) {
    let shell = args[index];
    // ...
}

同时,您可以使用closure ,或一个额外的function作用域,为每次迭代保留不同的indexshell:

function iterator(shell, index) {
    listener.of('/' + shell.namespace || 'shotgun')
        // ...
}

for (var index = 1; index < args.length; index++) {
    iterator(args[index], index);
}

并且,如果 args 是一个 Array,也可以使用 .forEach() 来完成。 :

args.forEach(function (shell, index) {
    listener.of('/' + shell.namespace || 'shotgun')
        // ...
});

关于javascript - 如何维护对正确对象的引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17730169/

相关文章:

javascript - 读取 xml 行不显示标签

node.js - 应用程序构建因 native react 异常而失败,评估脚本时出现问题

node.js - Sequelize UUID 中的意外 token 'export'

java - 在 Java 中设置为相等 : by value or reference?

c++ - 引用将参数传递给函数时出现奇怪的编译错误

javascript - Canvas 上的清除功能无法正常工作

javascript - 关闭返回?

javascript - 运行for循环并在一个范围内随机改变变量的值但满足所有变量

node.js - RDS 管理控制台中显示的 sequelize 和连接中的最大连接池大小的差异

c++ - 函数返回的指针地址