var net = require('net');
var redis = require('redis');
var redisClient = redis.createClient("redis://localhost:6379");
redisClient.on("connect",function(){
console.log("Connected to Redis");
});
net.createServer(function(socket){
console.log('CONNECTED: ' + socket.remoteAddress +':'+ socket.remotePort);
var id = '';
socket.on('data',function(data){
console.log(id);
if(id == '')
test();
else
//do something else
});
}).listen(10000,'');
function test(){
redisClient.hgetall('12345',function(err,res){
id = res.id;
});
}
在这段代码中,当我调用函数test时,为什么变量id不是闭包?它在测试函数中未定义给出错误ID。我是以错误的方式理解闭包吗?
答案 0 :(得分:2)
函数test
- 以及所有其他函数 - 只能看到全局变量,函数本身定义的变量以及关于函数 definition 的封闭范围中定义的变量。 / p>
您不会在调用该功能的范围内看到变量。如果要使函数可以访问它们,则必须将这些变量作为参数传递。
答案 1 :(得分:0)
是的,闭包不能看到在单独的函数中定义的变量。变量是词法(函数)作用域(如lex82和Pointy所述)。
您只能在test()中定义var id = ''
或在test()函数中传递id变量。