为什么在另一个函数内调用函数不起作用?

时间:2018-01-04 22:19:15

标签: javascript

var mult = (function(){
    var cache = {};
    var calculate = function(){
        var a = 1;
        for(var i = 0, l = arguments.length; i < l; i++){
          a = a * arguments[i];
        }
        return a;
    }

    return function(){
      return calculate(arguments);
    }
})();

console.log(mult(1, 2));

上面是我的代码,我希望mult函数会给我2值,但它会输出NaN。我将行calculate(arguments)更改为caculate.apply(null, arguments)并且有效。我不知道为什么旧代码不起作用?为什么我需要在这种情况下使用申请? null代表什么?

1 个答案:

答案 0 :(得分:3)

您的calculate函数需要单独的参数,但您传入的是array 1 。使用.apply为您传播数组内容。

1 从技术上讲,类似于arguments的对象不会从Array继承。