JavaScript 关于函数柯里化

function curry(func){
    let args=[].slice.call(arguments,1)
    let func_length=func.length
    return function(){
        let newArgs = args.concat([].slice.call(arguments));
        if(newArgs.length<func_length){
            return curry.call(this,func,...newArgs) 
        }
        return func.apply(this,newArgs)
    }
}

看到这段代码,想问一下两个return语句为什么要用.call的形式,直接调用不行吗,这两个this都是指向window的,好像没起到什么作用啊

阅读 1.8k
3 个回答

如果这个函数作为某个对象的方法,this指向就会有问题

arguments 是类数组对象, [].slice.call(arguments)是为了把类数组对象转成数组对象

新手上路,请多包涵

去看一下 call apply的作用

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