返回数组的闭包

Closure which return array

本文关键字:闭包 数组 返回      更新时间:2023-09-26

啊,关于闭包中变量作用域的问题^^

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

这是代码:

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:忽略代码的目的,我删除了其中的一些部分。。。

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

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

});