js函数柯里化面试题

下面的函数为啥返回的是6呢?返回的每次不都应该是_adder函数吗?并没有调用_adder.toString,他是怎么执行的?

function add() {
    // 第一次执行时,定义一个数组专门用来存储所有的参数
    var _args = Array.prototype.slice.call(arguments);

    // 在内部声明一个函数,利用闭包的特性保存_args并收集所有的参数值
    var _adder = function() {
        _args.push(...arguments);
        return _adder;
    };

    _adder.toString = function () {
        return _args.reduce(function (a, b) {
            return a + b;
        });
    }
    return _adder;
}

add(1)(2)(3)                // 6
阅读 1.5k
1 个回答

你可以打一下 typeof(add(1)(2)(3)) ,依然的 function 。

然后当试图显示它的时候,可能会自动调用 toString 拿到一个可以打印的串。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题