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/