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”就是返回的是最后的那组数据那我现在该怎么办啊?,
新手求教,在js的一个双层遍历中,为一个对象的属性赋值一个回调函数(带有一个必须的参数)
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
3条回答 默认 最新
斯洛文尼亚旅游 2017-03-10 07:04关注闭包的问题,改成下面的就行了,闭包引用当前值
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();本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报