Javascript函数序列示例

时间:2018-03-12 17:21:18

标签: javascript function console

function makeMultiplier(multiplier) {
  var myFunc = function (x) {
    return multiplier * x;
  };

  return myFunc;
}

var multiplyBy3 = makeMultiplier(3);
console.log(multiplyBy3(10));

所以我从在线课程中得到了这个例子,控制台打印出来: 30

我并不完全理解30是如何获得的,下面是我认为它是如何执行的,但如果不对,请纠正我。

  1. 我首先假设乘数的值变为3,然后函数 makeMultiplier 返回3 * X.

  2. 从这里开始,通过分配var multiplyBy3 = makeMultiplier (3),基本上 multiplyBy3 现在是一个返回3 *的函数X

  3. 因此,当插入10时,它返回3 * 10 = 30.

3 个答案:

答案 0 :(得分:5)

是的,你是对的,请记住,functions可以传递给变量和其他函数。

  • makeMultiplier会返回对function closure的引用,但它尚未执行。
  • var multiplyBy3 = makeMultiplier(3);将值3放入闭包函数,并返回对它的引用(仍然没有执行它)。

现阶段我们有:

function multiplyBy3(x) {
    return 3 * x;
}

console.log(multiplyBy3(10));
  • multiplyBy3(10)调用对闭包函数的引用并传入10。

答案 1 :(得分:1)

您发布的示例也称为“currying”。这是another javascript example of currying

我建议您养成使用ES6语法的习惯。您的示例在ES6中重写:

const makeMultiplier = multiplier => x => multiplier * x;
const multiplyBy3 = makeMultiplier(3);
console.log( multiplyBy3(10) ); // 30

console.log( makeMultiplier(3)(10) ); //30

答案 2 :(得分:0)

正确。这就是所谓的“封闭”。 (一个返回另一个有权访问父函数范围的函数的函数。