【问题标题】:Difference between the following nodejs codes以下nodejs代码之间的区别
【发布时间】:2016-10-07 00:01:18
【问题描述】:

第一个代码

net.createServer(function(socket){
    socket.on('data',function(id){
        getUserDetails(function(){console.log(id)});
    });
});

function getUserDetails(next){ 
    next();
}

第二个代码

net.createServer(function(socket){
    socket.on('data',function(id){
        getUserDetails(function(){console.log(id)});
    });
});

function getUserDetails(next){
    console.log(id); 
    next();
}

第一个代码记录 id,而第二个代码给出错误。我知道 getUserDetails 无法访问 id 但传递给 getUserDetails 的回调如何访问 id?

【问题讨论】:

  • id 不在第二个代码的范围内。它仅在socket.on 的回调范围内
  • 函数可以访问的变量是基于函数定义的位置,而不是调用的位置。

标签: javascript node.js closures


【解决方案1】:

id 是作用域为socket.on('data') 事件的回调函数的变量。

getUserDetails 方法不在该范围内 - 因此它无法访问此变量。

您作为参数发送给getUserDetails 的函数是在id 变量所在的回调函数范围内声明的,因此它可以访问它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-12
    • 1970-01-01
    • 2010-10-25
    • 2018-04-18
    相关资源
    最近更新 更多