加载中...

柯里化.toString隐式转换写法

博客 2023.04.09 02:20 656

问题描述: 像这样fn(1,2)(3)()存在空括号的该如何对传参进行相应的运算;

解决思路: .toString隐式转换;

知识点: 数据类型的转换规则;

代码示例:
简洁不够严谨的柯里化代码

function add(a) {
    return function (b) {
        return a + b
    }
}

add(1)(2)==3 //true

那如果像这样的fn(1)(2)()运行会怎么样呢?

add(1)(2)();

//Uncaught TypeError: add(...)(...) is not a function
 //   at <anonymous>:7:10

OK,会报错,那正确的代码如下:

function addCurry() {
    let arr = [...arguments]
    // 利用闭包的特性收集所有参数值
    var fn = function() {
        arr.push(...arguments);
        return fn;
    };
    // 利用 toString 隐式转换
    fn.toString = function () {
        return arr.reduce((a, b)=> a + b);
    }
    return fn;
}