这个关于闭包的例子怎么理解
var a = 1;
function f(b){
return function g(c){
return function h(d){
return a + b + c +d;
}
}
}
var add2 = f(2);
var add3 = add2(2);
var r = add3(10);
console.log(r);
这个关于闭包的例子怎么理解
var a = 1;
function f(b){
return function g(c){
return function h(d){
return a + b + c +d;
}
}
}
var add2 = f(2);
var add3 = add2(2);
var r = add3(10);
console.log(r);
f(2)执行完,
返回给add2 = function g(c){
return function h(d){
return a + b + c +d;
}
}
add2(2)执行完给
add3 = function h(d){
return a + b + c +d;
}
add3(10) 执行的时候就return 1+2+2+10了
a,b,c都有值是因为你这是个嵌套函数,没执行完是不会释放内存的,不知道这样你能不能理解
重新该写一下代码:
var add2 = function g(c) {
return function h(d) {
return 1 + 2 + c + d // 替换掉参数 a,b
}
};
var add3 = function h(d) {
return 1 + 2 + 2 + d // 替换掉参数c
};
var r = (1 + 2 + 2 + 10) // 替换参数d
var add2 = f(2);
//==> function g(c){
return function h(d){
return 1 + 2 + c + d;
}
}
var add3 = add2(2);
//==> function h(d){
return 1 + 2 + 2 + d;
}
var r = add3(10);
//==> 1 + 2 + 2 + 10;
console.log(r); //==> 15
类似这样 每次执行返回一个新的函数 并缓存上一个函数的参数(如果有点话)
const a = 1;
const f = b => c => d => a + b + c + d;
f(2)(2)(10) // 2 => 2 => 10 => a + 2 + 2 + 10; return 15
10 回答11.3k 阅读
5 回答4.9k 阅读✓ 已解决
4 回答3.2k 阅读✓ 已解决
2 回答2.8k 阅读✓ 已解决
3 回答2.4k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
这个没什么难的吧
r 的结果就是
a + b + c +d
这点没疑问吧,先说a,本身没有a变量,会逐级往外层找,最终找到了全局作用域下的a,也就是1;b也是同理,只不过到f函数这里就不继续往上找了,此时的b为f函数的参数,在var add2 = f(2)
的时候传过来了,也就是2,同理c也是2,d是10所以r = 1 + 2 + 2 + 10 = 15