调用具有多个闭包的 JavaScript 函数

calling a javascript function with multiple closures

本文关键字:JavaScript 函数 闭包 调用      更新时间:2024-06-02
    function sum(a) {
        var sum = a
        function f(b) {
            sum += b
            return f
        }
        f.toString = function () { return sum }
        return f
    }
    var a = sum(0)(1)(2)(3)(4)(5);

有人可以向我解释这段代码是如何工作的吗?我真的不知道如何以这种方式调用具有多个闭包的函数。以及为什么当我在浏览器控制台中打印时,结果是"函数 15"而不仅仅是 15

以及为什么当我在浏览器控制台中打印时,结果是"函数 15"而不仅仅是 15

要获得最终结果,您应该调用toString函数。此闭包在调用函数之前toString保持总和。

function sum(a) {
    var sum = a
    function f(b) {
        sum += b
        return f
    }
    f.toString = function() {
        return sum;
    }
    return f
}
var a = sum(0)(1)(2)(3)(4)(5);
document.write(a.toString());

sum(0)返回一个函数f,该函数在局部变量sum(该代码中唯一的闭包(上关闭。因为它返回一个函数,这意味着你可以调用该函数,该函数也接受一个参数并返回自身,这就是你可以保持这样链接的方式。

sum(0) // `sum` is 0, returns f (a function)
sum(0)(1) // returns f which adds 1 to `sum` and returns f again
// and again etc

另一种思考方式:

var fn0 = sum(0) // `sum` is 0, returns f (a function)
var fn1 = fn0(1) // returns f which adds 1 to `sum` and returns f again
var fn2 = fn1(2) // ...