在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問(wèn)答/HTML/ js關(guān)于閉包的問(wèn)題

js關(guān)于閉包的問(wèn)題

這個(gè)關(guān)于閉包的例子怎么理解

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)執(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ù),沒(méi)執(zhí)行完是不會(huì)釋放內(nèi)存的,不知道這樣你能不能理解

2017年8月10日 07:06
編輯回答
壞脾滊

類似這樣 每次執(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
2017年11月13日 15:31
編輯回答
陪妳哭

這個(gè)沒(méi)什么難的吧

r 的結(jié)果就是 a + b + c +d這點(diǎn)沒(méi)疑問(wèn)吧,先說(shuō)a,本身沒(méi)有a變量,會(huì)逐級(jí)往外層找,最終找到了全局作用域下的a,也就是1;b也是同理,只不過(guò)到f函數(shù)這里就不繼續(xù)往上找了,此時(shí)的b為f函數(shù)的參數(shù),在var add2 = f(2)的時(shí)候傳過(guò)來(lái)了,也就是2,同理c也是2,d是10

所以r = 1 + 2 + 2 + 10 = 15

2017年8月6日 20:28
編輯回答
紓惘

重新該寫一下代碼:

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
2017年3月20日 06:33
編輯回答
貓館
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             
2018年1月8日 16:29