新手求教,在js的一个双层遍历中,为一个对象的属性赋值一个回调函数(带有一个必须的参数)

var a = [ {
name : 'one',
a1 : 11,
a2 : 12
}, {
name : 'two',
a1 : 21,
a2 : 22
} ];
var b = [ {
name : 'one'
}, {
name : 'two'
} ];
for ( var i = 0; i < a.length; i++) {
for ( var j = 0; j < b.length; j++) {
if (a[i].name == b[j].name) {
var qqq = a[i].a1;
var www = a[i].a2;
b[j].func = function(params) {
alert(qqq + " " + www);
return qqq + " " + www;
};
}
}
}
b[0].func();
我想通过遍历,使用a中的值为b赋一个无名函数,这个无名的函数必须有一个默认参数params,而且必须放在首位才会被解析,可是现在出现了这种情况,执行出来的b中的func都是返回“21 22”就是返回的是最后的那组数据那我现在该怎么办啊?,

闭包的问题,改成下面的就行了,闭包引用当前值

     var a = [{
        name: 'one',
        a1: 11,
        a2: 12
    }, {
        name: 'two',
        a1: 21,
        a2: 22
    }];
    var b = [{
        name: 'one'
    }, {
        name: 'two'
    }];
    for (var i = 0; i < a.length; i++) {
        for (var j = 0; j < b.length; j++) {
            if (a[i].name == b[j].name) {
                var qqq = a[i].a1;
                var www = a[i].a2;
                b[j].func = (function (qqq, www) {////////////////////////
                    return function (params) {
                        alert(qqq + " " + www);
                        return qqq + " " + www;
                    };
                })(qqq, www);/////////////
            }
        }
    }
    b[0].func();
    b[1].func();

你要返回的是什么?都没搞清楚你的问题,你把函数放在for中,最后遍历出来肯定时最后的啊

闭包的问题,其实你可以用let来定义i和j,这是es6的新属性,解决作用域的问题,解决闭包带来的影响。