javascript - 回调内变量的范围

标签 javascript node.js scope

var net = require('net');
net.createServer(function(socket){
    console.log('CONNECTED: ' + socket.remoteAddress +':'+ socket.remotePort);
    var id = '123';
    socket.on('data',function(data){
        console.log(id);
        setTimeout(function(){
            console.log(id);
        },5000);
    });
}).listen(10000,'');

在这段代码中,它应该打印 123 并且未定义,对吧?但它打印 123 和 123。根据我的理解,setTimeout 会在一段时间后执行,此时它无法访问 id 变量。我真的很困惑。为什么会发生这种情况以及我错在哪里。

最佳答案

socket.on 和 setTimeout 的回调都在定义 id 变量的范围内。由于两个回调都没有定义自己的本地 id,因此它们都打印 123。

关于javascript - 回调内变量的范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35892098/

相关文章:

javascript - 在浏览器 session 中保存表单数据

javascript - 为什么 viewmodel 函数代码在加载时执行?

javascript - 使用 Mocha 测试数组的断言错误

javascript - 帖子回复没有得到?

Python函数可以从作用域外被赋予新的属性吗?

javascript - 有什么方法可以在剑道网格自定义弹出模板中设置默认值?

javascript - 使用 CellMeasurer react 虚拟表无法正确计算高度

javascript - 模型中的 Backbone 集合 + 使用 Node.js 的 Restful 服务器设计

Javascript 范围怪异、函数和浏览器

javascript - 全局变量范围在 Node.js 控制台中无法识别