【问题标题】:Closure which return array闭包返回数组
【发布时间】:2014-10-25 17:37:04
【问题描述】:

啊,关于闭包变量范围的问题^^

嗯,我发现了很多关于这个主题的问题,但找不到任何答案。

代码如下:

var groups = [];
var users = [];

var getPermissions = function(accessList){
    var desk = [];
    _.forEach(accessList, function(access){
        desk.push(access.name);
        console.log("1 - Permission :" + desk);
    });

    return desk;
};

_.forEach(groups, function(group){
    _.forEach(users, function(user){
        var permissions = [];
        permissions = getPermissions(user.access);
        console.log("2 - Permission :" + permissions);
    });
});

你能告诉我为什么日志 1 给了我答案,而日志 2 一直是空的:(

谢谢大家

P.S:忽略代码的目的,我删除了它的一些部分......

【问题讨论】:

  • 你能在小提琴中重现你的问题吗?我猜你对代码的改动太大了,根本没有显示你真正的问题,这可能是异步
  • 由于users 是一个零长度列表,循环将立即中止,您将不会得到任何输出。您需要提供足够的代码来实际重现问题。
  • 第 6 行有一个错字 - _forEach 应该是 _.forEach

标签: javascript node.js closures


【解决方案1】:

您需要使用回调来使第二个控制台正常工作,因为当您的函数被执行时,它将显示带有空白数组的控制台。

var getPermissions = function(accessList,callback){
    var desk = [];
    _forEach(accessList, function(access){
        desk.push(access.name);
        console.log("1 - Permission :" + desk);
    });

    callback(desk);
};

_.forEach(groups, function(group){
    _.forEach(users, function(user){
        var permissions = [];
       getPermissions(user.access,function(data){
    console.log("2 - Permission :" + data);   

     permissions =data;     
    });
});

});

【讨论】:

  • 这个好运吗?
猜你喜欢
  • 1970-01-01
  • 2017-04-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多