如何在闭包中乘以数字

Igo*_*ets 4 javascript closures

如何实现用于乘以任意数量的数字的锁定功能。

调用示例:

multiply(1)(2)(3)(4)(5) // 120
Run Code Online (Sandbox Code Playgroud)

为了完成这个任务,需要重新定义toString内部函数的方法,该方法应该返回累积结果,但我有结果NaN

multiply(1)(2)(3)(4)(5) // 120
Run Code Online (Sandbox Code Playgroud)

Nin*_*olz 5

首先不要arguments在函数中用作参数,因为该变量在函数中可用作函数(argumentsobject)参数的对象数组。

然后你需要有一个内部函数m,它使用参数并计算乘积并返回函数本身。

内部函数获取toString获取最终结果的方法。

最后,您需要使用外部函数的所有参数调用内部函数。

一个小提示,对于不可实例化的函数,只取一个小写字母。

function multiply(...args) {
    function m(f, ...a) {
        p *= f;
        if (a.length) {
            m(...a);
        }
        return m;
    }

    var p = 1;            // neutral value for multiplication
    m.toString = _ => p;
    return m(...args);
}

console.log(multiply(5)(5)(6)(8));
console.log(multiply(2, 3, 4)(5)(6, 7));
Run Code Online (Sandbox Code Playgroud)


归档时间:

查看次数:

1330 次

最近记录:

4 年,4 月 前