JHCan333 2017-03-10 06:13 采纳率: 79.5%
浏览 1617
已采纳

新手求教,在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”就是返回的是最后的那组数据那我现在该怎么办啊?,

  • 写回答

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();
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥20 求快手直播间榜单匿名采集ID用户名简单能学会的
  • ¥15 DS18B20内部ADC模数转换器
  • ¥15 做个有关计算的小程序
  • ¥15 MPI读取tif文件无法正常给各进程分配路径
  • ¥15 如何用MATLAB实现以下三个公式(有相互嵌套)
  • ¥30 关于#算法#的问题:运用EViews第九版本进行一系列计量经济学的时间数列数据回归分析预测问题 求各位帮我解答一下
  • ¥15 setInterval 页面闪烁,怎么解决
  • ¥15 如何让企业微信机器人实现消息汇总整合
  • ¥50 关于#ui#的问题:做yolov8的ui界面出现的问题
  • ¥15 如何用Python爬取各高校教师公开的教育和工作经历