结果图
柯里化是怎么执行的
首先先让我们来看看需要()回调的柯里化是怎么执行的
每次我们使用柯里化函数都需要在结尾使用一个(),让其可以返回结果值,但是多多少少有点多余,而我们又无法在执行前去判断一个函数之后是否会被调用,那么,如果是字符串呢?
function test(){
let a = [...arguments]
function c(){
if(arguments.length){
a.push(...arguments)
return c;
}else{
return a
}
}
return c
}
function _c(evalStr){
// 去除函数中的()
evalStr = evalStr.replaceAll(/\(\)/g,'')
// 获取函数名
let fn = evalStr.split('(')[0]
// 获取函数执行体 例:(1)(2)
let fnCall = evalStr.split(fn)[1]
let executeStr = fn+fnCall+'()'
// eval是浏览器内置的一个js执行函数,整活可以试试,项目里面根据情况去使用,有一定的注入风险
return eval(executeStr)
}
console.log(_c('test(1,2,3)()(4)')) // [1, 2, 3, 4]
console.log(_c('test(1,2)(5)()')) // [1, 2, 5]
console.log(_c('test()()(1,2)(5)(6)'))// [1, 2, 5, 6]
免责声明
此次使用的 eval 是整活用的,请各位尽量不要在公司现目使用,有注入风险!!!,若要使用请做好闭包之类的处理