5 回答
TA贡献1898条经验 获得超8个赞
这个没什么难的吧
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
TA贡献2019条经验 获得超9个赞
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都有值是因为你这是个嵌套函数,没执行完是不会释放内存的,不知道这样你能不能理解
TA贡献1805条经验 获得超10个赞
重新该写一下代码:
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
TA贡献1831条经验 获得超10个赞
类似这样 每次执行返回一个新的函数 并缓存上一个函数的参数(如果有点话)
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
添加回答
举报
