乐趣区

关于javascript:JavaScript-踩坑

1. 对有默认值的函数柯里化后调用报错

首先实现柯里化函数

function curry(fn) {
  const len = fn.length;
  return function curred(...args) {if (args.length >= len) {return fn(...args);
    } else {return curred.bind(null, ...args);
    }
  };
}

调用

function show(a = 0, b, c) {console.info(a, b, c);
}

const next = curry(show);
next("g")("ccc")("ooo");

输入:

为什么会这样?
去掉参数 a 的默认值就好了,查阅函数的扩大 ### 函数的 length 属性做了具体的阐明:第一个参数 a 设置了默认值导致 show.length 为 0,(也就是说默认值导致函数参数的长度变小了)这样传递一个参数 ”g” 调用执行了 show,show 执行完返回的是 undefined 所以前面再调用 next 就报错了。所以对须要柯里化的函数尽量不要传递默认值。

退出移动版