function makeMultiplier(multiplier) {
var myFunc = function (x) {
return multiplier * x;
};
return myFunc;
}
var multiplyBy3 = makeMultiplier(3);
console.log(multiplyBy3(10));
所以我从在线课程中得到了这个例子,控制台打印出来: 30
我并不完全理解30是如何获得的,下面是我认为它是如何执行的,但如果不对,请纠正我。
我首先假设乘数的值变为3,然后函数 makeMultiplier 返回3 * X.
从这里开始,通过分配var multiplyBy3 = makeMultiplier (3),基本上 multiplyBy3 现在是一个返回3 *的函数X
因此,当插入10时,它返回3 * 10 = 30.
答案 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)
正确。这就是所谓的“封闭”。 (一个返回另一个有权访问父函数范围的函数的函数。