有人能解释一下这段代码是如何工作的吗?
function makeAdder(x) {
return function(y) {
return x + y;
};
}
var add5 = makeAdder(5);
var add10 = makeAdder(10);
console.log(add5(2)); // 7
console.log(add10(2)); // 12
发布于 2017-03-15 06:44:30
调用makeAdder(5)
时,它将返回对新函数的引用。
function(y) {
return x + y;
};
所以add5
保留了引用。在调用add5(2)
之后,将2
传递给函数。在它中,当它想返回x + y
时,它开始查找变量。从x
开始,它查找并看到没有在其中定义x
,然后转到定义内部函数的scope
在这里
function makeAdder(x) {
return function(y) {
return x + y;
};
}
它在这里定义了x
,因为您在var add5 = makeAdder(5);
期间调用并传递了x
。在找到y
并在它的作用域中找到之后。最后返回x + y
。
的思想是,每个函数都有对它的创建者的引用(定义它的地方),当它找不到变量时,它会在其中找到更大的变量,直到全局范围。
发布于 2017-03-15 06:46:59
function makeAdder(x) {
return function(y) {
return x + y;
};
}
当您执行var add5 = makeAdder(5);
时,add5
变成了一个返回我的makeAdder
的函数,add5
将如下所示
function(y){
return 5 + y;
}
所以当你做add5(2)
时,它会做5+2,然后返回7;
发布于 2017-03-15 06:54:19
makeAdder(5)
X => 5和y没有值,所以x+y => 5+0 => 5
var add5 = makeAdder(5);
add5(2);
我们已经用x => 5为函数makeadder创建了变量,所以现在我们传递y => 2和x => 5,所以x+y => 5+2 => 7。
外部函数变量在内部函数中可访问的这个属性在javascript中称为闭包属性。此外,对y变量的添加对于外部函数也是不可访问的。
https://stackoverflow.com/questions/42802744
复制相似问题