node.js - Node JS 变量范围

标签 node.js variables scope

我有下一段代码

function Server() {

    function eventHandler(data) {
        console.log('DATA ' + this.server.socket.remoteAddress + ': ' + data);
        socket.write('You said "' + data + '"');
    }

    function connectionHandler(socket) {
        console.log('server connected');
        console.log('CONNECTED: ' + socket.remoteAddress +':'+ socket.remotePort);
        socket.on('data', eventHandler);
    }

    this.server = net.createServer(connectionHandler);

    this.port = undefined;

    this.startServer = function(port) { //Maybe change backlog for security reasons
        this.port = port;
        this.server.listen(port, function() { //'listening' listener add handle object here
            console.log('server bound');});
    }
}

每次建立连接时我都会得到

server bound
server connected
CONNECTED: 132.65.16.64:55028

/a/fr-05/vol/netforce/stud/yotamoo/ex4/myHTTP.js:7
        console.log('DATA ' + this.server.socket.remoteAddress + ': ' + data);
                                          ^
TypeError: Cannot read property 'remoteAddress' of undefined
    at Socket.eventHandler (/a/fr-05/vol/netforce/stud/yotamoo/ex4/myHTTP.js:7:43)
    at Socket.emit (events.js:67:17)
    at TCP.onread (net.js:329:14)

这当然与evenHandler()有关。我不明白 Node JS 中如何创建对象及其范围。例如,socketdata 在哪里创建的?他们的范围是什么?

非常感谢

最佳答案

这表示当前调用的函数。

在您的情况下,这指的是 eventHandler 并且 eventHandler 仅将数据作为可访问值。

如果您尝试访问套接字,您将得到像您一样的异常。因为套接字不在该函数范围内。

套接字和数据都来自异步回调,这是 Node.js 的主要模式。

关于node.js - Node JS 变量范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13746989/

相关文章:

java - 用 c 编写一个函数,其中包含以下语句序列 [不会编译]

javascript - 将 'a' 作为此箭头函数的输入是错误吗?

php - PHP 和 Node.JS 中西里尔文 sha1 哈希值的差异

android - 据称随机获取 "No permission to send message to these tmIDs"HMS 推送服务

javascript - JQuery变量在循环中覆盖,想要保留不同的值

php - 大括号中的变量 - PHP 编码问题

javascript - 网站前端使用backbone,后端使用nodejs

node.js - 如何为自己的 npm 包创建自定义 cli 命令

c# - 错误 2 使用未分配的局部变量 'Y'

if 语句中的 C++ 范围问题 : create one of two objects