通过雄辩的javascript阅读以试图绕过函数,我读了这个示例代码:
function makeAddFunction(amount) {
function add(number) {
return number + amount;
}
return add;
}
var addTwo = makeAddFunction(2);
var addFive = makeAddFunction(5);
show(addTwo(1) + addFive(1));
我得到了它的要点,但是在几个小时内检查了代码并多次阅读了相应的文本,这只是没有点击给我:这段代码究竟做了什么? add
函数在哪里获取number
参数?它来自show
命令吗?如果是这样,它是如何传递的?我只是没有看到它......
答案 0 :(得分:1)
首先,我认为你的片段中缺少一些代码,因为现在看来,show会抛出undefined。
但是,这里有足够的回答你的问题的核心。
1)var addTwo将值2传递给makeAddFunction。这是“金额”。 addTwo返回一个add值的实例,其值为2。
2)var addFive将值5传递给makeAddFunction。这是“金额”。 addFive返回一个add值的实例,其值为5。
3)使用数字1调用addTwo。这将添加到先前的配置值2并返回3.
4)使用数字5调用addFive。这将添加到之前的配置值5并返回6.
5)如果定义了show函数,它将添加3 + 6并显示9。
答案 1 :(得分:1)
add函数在哪里获取数字参数?
=> number作为add的参数传递。当您编写addTwo(1)
时,1将是数字参数。
addTwo函数在哪里获取金额参数?
=>这被称为闭包。当您运行makeAddFunction(2)
时,值2将作为金额传递,并由添加功能捕获。
答案 2 :(得分:1)
函数makeAddFunction
取一个数字(amount
)并返回一个函数,该函数将作为参数传入的数字添加到传递给外部函数的数字中。
function makeAddFunction(amount) {
function add(number) {
return number + amount;
}
return add;
}
调用var addTwo = makeAddFunction(2);
等同于编写以下函数:
var addTwo = function(number) {
return number + 2; // this function is actually returned by makeAddFunction
}
您可以使用参数addTwo(5);
这是一个小提琴:http://jsfiddle.net/Eh4LK/1/按下运行按钮执行