第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

函數(shù)里面返回函數(shù)到底有什么用呢?

函數(shù)里面返回函數(shù)到底有什么用呢?

瀟瀟雨雨 2019-04-19 16:29:37
經(jīng)常會(huì)看到這樣關(guān)于函數(shù)的寫法:varcal=function(a){varplus=function(){returna+1;}returnplus;}varfn=cal(3)();我了解這個(gè)地方主要是使用了閉包。但是一般像這種函數(shù)里面再返回函數(shù)的寫法有什么用呢?或者說(shuō)運(yùn)用在哪些場(chǎng)景里面?
查看完整描述

2 回答

?
偶然的你

TA貢獻(xiàn)1841條經(jīng)驗(yàn) 獲得超3個(gè)贊

像這種用法最大的用處是:“延遲一個(gè)函數(shù)的執(zhí)行,讓它僅在需要時(shí)才會(huì)執(zhí)行,但其執(zhí)行環(huán)境會(huì)被一直保留到執(zhí)行時(shí)(閉包)”。
最常見(jiàn)的例子是在綁定事件的時(shí)候需要帶上參數(shù),一種方法是把參數(shù)定義為全局變量:
vara=123;
xxx.onclick=function(){
alert(a);
};
但這樣做會(huì)嚴(yán)重污染全局變量,尤其是需要綁定的事件很多的時(shí)候。而且這種方法在通過(guò)代碼動(dòng)態(tài)綁定事件時(shí)也不方便。例如我想給2個(gè)對(duì)象綁定同一個(gè)事件,但是參數(shù)不一樣,此時(shí)用上面的代碼就不好處理了。
這時(shí)候就是高階函數(shù)發(fā)揮用武之地的時(shí)候了:
vargetHandler=function(a){
returnfunction(){
alert(a);
};
};
xxx1.onclick=getHandler(123);
xxx2.onclick=getHandler(456);
當(dāng)然,場(chǎng)景不局限于添加事件。只要是需要延遲執(zhí)行一個(gè)函數(shù),但又想讓該函數(shù)記住執(zhí)行環(huán)境,這時(shí)候就可以用到高階函數(shù)。
                            
查看完整回答
反對(duì) 回復(fù) 2019-04-19
?
慕勒3428872

TA貢獻(xiàn)1848條經(jīng)驗(yàn) 獲得超6個(gè)贊

1、防止變量污染全局變量,在閉包里定義的變量,外部是不可以訪問(wèn)的,比如a你可以在這里面任意使用,但是不影響在其他地方重新定義一個(gè)a
2、高階函數(shù),應(yīng)該說(shuō)閉包只是高階函數(shù)實(shí)現(xiàn)的時(shí)候出現(xiàn)的一個(gè)特征而已。這樣做的好處就是可以用函數(shù)生成函數(shù)。簡(jiǎn)單來(lái)說(shuō),比如有個(gè)加法的函數(shù):
functionadd(a){
varadda=function(b){
returna+b;
}
returnadda;
}
有了這樣一個(gè)函數(shù),當(dāng)我們需要一個(gè)+3的函數(shù)的時(shí)候,就可以varadd3=add(3)需要+4的函數(shù)時(shí)候就可以varadd4=add(4);好處就是,實(shí)現(xiàn)了一個(gè)稍微復(fù)雜一點(diǎn)兒的函數(shù),就可以生產(chǎn)很多相對(duì)簡(jiǎn)單的函數(shù),這樣可以提高代碼的復(fù)用。
                            
查看完整回答
反對(duì) 回復(fù) 2019-04-19
  • 2 回答
  • 0 關(guān)注
  • 610 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)