如何在此CodeSchool示例中使用“.shift()”方法?

时间:2015-02-16 00:02:08

标签: javascript function

我一直在关注CodeSchool Javascript教程并理解一切,直到我被这个问题困扰:

  

在名为applyAndEmpty的变量中,构建并存储一个函数   输入一个输入数字和一个函数队列作为参数。运用   一个for循环,将Queue的函数应用于输入数字,   其中每个函数的结果成为下一个函数的输入。   此外,调用函数后,队列应为空。

它提供了这个解决方案:

var puzzlers = [
    function (a) { return 8*a - 10; },
    function (a) { return (a-3) * (a-3) * (a-3); },
    function (a) { return a * a + 4; },
    function (a) { return a % 5; }
];
var start = 2;

var applyAndEmpty = function(input, queue) {
  var length = queue.length;
  for(var i = 0; i < length; i++) {
    input = queue.shift()(input);
  }
  return input;
};
alert(applyAndEmpty(start, puzzlers));

我已经评论了解决方案的每一行,但我不知道为什么行&#34; queue.shift()(输入);&#34;移位方法使用第二组括号。我查看了Mozilla开发者网络上的方法签名,但他们没有这种用法的示例。我发现这种语法非常奇怪。有人可以在概念上解释为什么这有效以及这里发生了什么?

1 个答案:

答案 0 :(得分:2)

shift方法返回数组中的项,因此queue.shift()的值是一个函数。调用函数后(input)input作为参数。