map函数为什么传入的参数写法不一样,结果也不一样

Runningfyy
  • 888

fn就是一个函数(经过柯里化处理,再传一个参数就会执行)
map里面直接传和用一个匿名函数包裹了传 按我的理解应该是一样的。为什么打印的结果区别这么大

const curry = function(fn){
    return function curried(...args){
        if(fn.length===args.length){
            return fn.apply(this,args)
        }else{
            return function(...args1){
                return curried.apply(this,args.concat(args1))
            }
        }
    }
}
const prop = curry(function (key, obj) {
    return obj[key]
});
const personList = [{name: 'kevin'}, {name: 'daisy'}]
const fn = prop('name')

console.log(
    personList.map((item)=>{
        return fn(item)
    }), 
    personList.map(fn) 
)

image.png

回复
阅读 238
1 个回答
✓ 已被采纳

首先,fn是这个东西

function(...args1){
   return curried.apply(this,args.concat(args1))
}

这个函数内部调用curried,curried一个参数还是两个参数是有区别的,这个参数是根据fn的参数来的

personList.map((item)=>{
   return fn(item)
})

这种写法fn的参数是一个,执行的是fn.apply(this,args)
下面的写法是接受了map的默认参数,而map默认三个参数,所以执行了下面的代码

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
你知道吗?

宣传栏