老师这里的value = cb.call(obj[i], i, obj[i]);里第一个参数为啥写obj[i]啊

老师这里的value = cb.call(obj[i], i, obj[i]);里第一个参数为啥写obj[i]啊

function each(obj, cb) {
    var value;

    if (Array.isArray(obj)) {
        for (var i = 0; i < obj.length; ++i) {
            value = cb.call(obj[i], i, obj[i]);

            if (value === false) {
                break;
            }
        }
    } else {
        for (var i in obj) {
            value = cb.call(obj[i], i, obj[i]);

            if (value === false) {
                break;
            }
        }
    }
}

each([1, 2, 3], function(index, value) {
    console.log(index, value);
});

each({a: 1, b: 2}, function(index, value) {
    console.log(index, value);
});

// 0 1
// 1 2
// 2 3
// a 1
// b 2


正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
好帮手慕慕子 2022-08-28 14:21:28

同学你好,call方法的第一个参数的作用是改变被调用方法内部的this指向,但是这段代码中并没有使用this,所以第一个参数传递任意值都是可以的,所以这里写的obj[i]没有什么特殊意义,只是作为第一个参数传递。

祝学习愉快~

  • 提问者 闪电打雷躲树下 #1

    这道题什么情况下value==false啊老师

    2022-08-28 18:40:20
  • 因为value保存的是传入的回调函数cb调用后的返回值,所以当函数的返回值为false时,就会满足if条件,示例:

    https://img1.sycdn.imooc.com//climg/630c2622090ea14623281366.jpg

    祝学习愉快~

    2022-08-29 10:36:33
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师