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的新属性,解决作用域的问题,解决闭包带来的影响。