5 回答

TA貢獻(xiàn)1898條經(jīng)驗(yàn) 獲得超8個(gè)贊
這個(gè)沒什么難的吧
r 的結(jié)果就是 a + b + c +d
這點(diǎn)沒疑問吧,先說a,本身沒有a變量,會(huì)逐級(jí)往外層找,最終找到了全局作用域下的a,也就是1;b也是同理,只不過到f函數(shù)這里就不繼續(xù)往上找了,此時(shí)的b為f函數(shù)的參數(shù),在var add2 = f(2)
的時(shí)候傳過來了,也就是2,同理c也是2,d是10
所以r = 1 + 2 + 2 + 10 = 15

TA貢獻(xiàn)2019條經(jīng)驗(yàn) 獲得超9個(gè)贊
f(2)執(zhí)行完,
返回給add2 = function g(c){
return function h(d){
return a + b + c +d;
}
}
add2(2)執(zhí)行完給
add3 = function h(d){
return a + b + c +d;
}
add3(10) 執(zhí)行的時(shí)候就return 1+2+2+10了
a,b,c都有值是因?yàn)槟氵@是個(gè)嵌套函數(shù),沒執(zhí)行完是不會(huì)釋放內(nèi)存的,不知道這樣你能不能理解

TA貢獻(xiàn)1805條經(jīng)驗(yàn) 獲得超10個(gè)贊
重新該寫一下代碼:
var add2 = function g(c) {
return function h(d) {
return 1 + 2 + c + d // 替換掉參數(shù) a,b
}
};
var add3 = function h(d) {
return 1 + 2 + 2 + d // 替換掉參數(shù)c
};
var r = (1 + 2 + 2 + 10) // 替換參數(shù)d

TA貢獻(xiàn)1831條經(jīng)驗(yàn) 獲得超10個(gè)贊
類似這樣 每次執(zhí)行返回一個(gè)新的函數(shù) 并緩存上一個(gè)函數(shù)的參數(shù)(如果有點(diǎn)話)
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
添加回答
舉報(bào)