dashengzi66 / note

学习笔记
0 stars 0 forks source link

手写系列 #17

Open dashengzi66 opened 3 years ago

dashengzi66 commented 3 years ago

手写call

Function.prototype.myCall = function(context) {
    if(typeof this !== 'function') {
        throw new TypeError('not function')
    }
    context = context || window
    context.fn = this;
    let arg = [...arguments].slice(1);   
    let result = context.fn(...arg);    
   delete context.fn
   return result
}
dashengzi66 commented 2 years ago

柯里化

柯里化是一种函数转化方法,是 高阶函数(接收函数作为参数的函数)的一 种,它将一个接收多参数的函数转化为接 收部分参数的函数。柯里化后的函数只传 递部分参数来调用,并返回一个新的函数 去处理剩余的参数,是逐步传参的过程

cosnt currying=(fn, arr = [])=> {
  let len = fn.length;//获取函数参数个数
  return function (...args) {
    let carr = [...arr, ...args];
    if (carr.length < len) {
      return  currying(fn, carr);
    } else {
      return fn(...carr);
    }
  }
},
function sum(a, b, c, d, e) {
  return a + b + c + d + e;
}
let  r = currying(sum)(1)(2,3)(4,5)