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

发布于 2022-09-12 23:38:19 字数 711 浏览 17 评论 0

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

GRAY°灰色天空 2022-09-19 23:38:19

首先,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默认三个参数,所以执行了下面的代码

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文