apply函数如何工作来读取传递给内部函数的所有数组参数?

时间:2016-09-27 07:01:05

标签: javascript

下面我引用了eloquentJavascript

Passing along Arguments

function noisy(f) {
  return function(arg) {
    console.log("calling with", arg);
    var val = f(arg);
    console.log("called with", arg, "- got", val);
    return val;
  };
}

上述单一论证的作品,我得到了那个部分,但是 我想知道的是关于apply之后的短语 方法...它说我们可以将类似数组的参数列表传递给上面的函数.... 我试过这样做但失败了...... 任何人都可以说明如何传递一个类似数组的参数对象和调用传递的参数的函数?

我看到了来自其他网站的调用,应用和绑定功能,但我想坚持使用本教程,看看它是如何工作的?

我将上述功能运行为:

return noisy(String)(0); //works

return noisy(String).apply(null,[0,1,2,3,4]);

获得与上面相同的结果:

calling with 0 called with 0 - got 0

我如何使用应用于嘈杂的函数来读取所有参数?

2 个答案:

答案 0 :(得分:1)

请参阅下面的代码段

// Code goes here

function noisy(f) {
      return function() {
        var args = Array.prototype.slice.call(arguments);
        for(var i=0;i<args.length;i++){
        console.log("calling with", args[i]);       
        var val = f(args[i]);
        console.log("called with", args[i], "- got", val);
        }
      };
    }
     noisy(String)(0); //works
     noisy(String).apply(null,[0,1,2,3,4]);

答案 1 :(得分:1)

您必须使用arguments objectES6 spread operator

apply的第二个运算符需要一个数组,但它不会将数组应用于您的函数。相反,它会通过添加每个数组项作为参数来调用它。