Jquery:将函数作为变量传递

时间:2014-04-29 12:17:30

标签: javascript

我正在通过这个网站学习jquery,我真的很困惑如何将函数作为变量传递(如果我正确地说这个)。举个例子:

function makeAddFunction(amount) {
  function add(number) {
    return number + amount;
  }
  return add;
}

var addTwo = makeAddFunction(2);
var addFive = makeAddFunction(5);
show(addTwo(1) + addFive(1));

我知道makeAddFunction(2)说:" makeAddFunction采用可变数量,所以将2传递给它"。 我不明白两件事:

  1. 发生了什么""当您将变量(addTwo和addFive)声明为函数时? var =函数的结果,还是它=对函数的引用?
  2. 当addTwo / addFive不接受任何争论时,如何将(1)传递给addTwo / addFive(在最后一行代码中)?此外,(1)如何通过"数字"函数中的变量add?
  3. 谢谢!

2 个答案:

答案 0 :(得分:0)

广告1。

一步一步:

var addTwo = makeAddFunction(2);

变为

var addTwo = function (number) { return number + 2; };

相当于:

function addTwo(number) { return number + 2; };

所以addTwo接受一个参数

广告2。

show(addTwo(1) + addFive(1));

变为

show((1 + 2) + (1 + 5));

show(3 + 6);

show(9);

答案 1 :(得分:0)

makeAddFunction返回一个函数引用。使用函数引用,您可以调用它。

在执行makeAddFunction(2);时,要检查的重要事项是它返回的内容。如您所见,它返回add这是另一个函数。事实上,做var addTwo = makeAddFunction(2);

完全相同
var addTwo = function add(number) {
    return number + 2;
}

作为证明,请检查您可以做什么:

console.log(makeAddFunction(2)); //Will Log function add(){...}
console.log(makeAddFunction(2)(1)); //Will Log 3

您实际上只是创建"动态功能"或其正确名称:Closure