函数柯里化(function currying),它用于将一个多参数的函数分解;基本方法是使用一个闭包返回一个函数;比如将下面函数柯里化
function add (a, b) {
return a + b;
}
add(1, 2) // 3
柯里化后:
function add (a) {
return function (b){
return a+b
}
}
add(1)(2) // 3
es6写法:
const add=a=>b=>c=>a+b+c
add(1)(2)(3) //6
这样写后有什么用处呢?
//一、参数复用
var add=a=>b=>a+b
var a=add(5)//固定第一个参数为5
a(1)//6
a(2)//7
a(3)//8
//二、延迟执行
var add=a=>b=>a+b
var a=add(5)
a // b=>a+b 返回的新函数先不执行
....
a(5) //10 执行时机
//三、逻辑复用 详见下面部分vue源码
VUE源码中多处使用了柯里化技巧 --version: 3.3.0-beta.5
//vue.global.js
function makeMap(str, expectsLowerCase) {
const map2 = /* @__PURE__ */ Object.create(null);
const list = str.split(",");
for (let i = 0; i < list.length; i++) {
map2[list[i]] = true;
}
return expectsLowerCase ? (val) => !!map2[val.toLowerCase()] : (val) => !!map2[val];
}
//使用---
var isNonTrackableKeys = makeMap(`__proto__,__v_isRef,__isVue`);
isNonTrackableKeys('xxx')//false
isNonTrackableKeys('__proto__')//true
VUE源码截图