使用以下代码:
function makeAddFunction(amount) {
function add(number) {
return number + amount;
}
return add;
}
var addTwo = makeAddFunction(2);
var addFive = makeAddFunction(5);
console.log(addTwo(1) + addFive(1));
控制台打印出9.我假设add函数中的'number'为零,但为什么'number'的值最初为0?
答案 0 :(得分:4)
关于此,没有“最初为0”。
你首先返回一个为数字加2的函数,然后创建一个向数字加5的函数。
因此,你已经有效地写了:
console.log((2 + 1) + (5 + 1));
和3 + 6是9。
addTwo本质上是:
var addTwo = function (number) {
return number + 2;
}
添加addFive是:
var addFive = function (number) {
return number + 5;
}
因为您将其用作closure。
答案 1 :(得分:0)
当你调用makeAddFunction
时,它会传递你为amount
传入的参数,然后返回该内部函数。
因此当你传入2时,它会返回:
function add(number) {
return number + 2;
}
然后,您将该代码设置为addTwo
变量。因此,当您使用参数1调用addTwo
时,它将返回1 + 2(3)