javascript - 闭包中的变量但无法访问

标签 javascript node.js closures

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;
     });
}

在这段代码中,为什么当我调用函数测试时变量 id 不是闭包?它给出的错误 ID 在测试函数中未定义。我对闭包的理解是否错误?

最佳答案

函数test——以及所有其他函数——只能看到全局变量、函数本身内定义的变量以及函数定义的封闭范围内定义的变量定义.

您在调用函数的作用域中看不到变量。如果您想让函数可以访问这些变量,则必须将它们作为参数传递。

关于javascript - 闭包中的变量但无法访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35894611/

相关文章:

javascript - 基本 JavaScript 问题 - 事件处理程序未调用该函数?

javascript - 我必须制作一个正则表达式,但无法弄清楚语法

node.js - 在 docker 中使用 node 安装 phantomjs

node.js - 使用meteor将图像文件从google云存储桶下载到IOS localstorage

swift - 我可以直接使用类型元组定义函数头吗?

javascript - 为什么我需要一个 Selenium Server 而不是直接调用 WebDriver 实现

javascript - 我应该如何访问覆盖函数中的覆盖变量?

javascript - 如何使用 LDAP.js 将用户添加到 LDAP 组

functional-programming - mapcar 的多个参数

closures - 如何调用传递给函数的闭包?