无码av一区二区三区无码,在线观看老湿视频福利,日韩经典三级片,成 人色 网 站 欧美大片在线观看

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

閉包有什么用?

2022-12-22 12:09 作者:NightPoetry  | 我要投稿

簡(jiǎn)而言之,閉包就是用來(lái)延長(zhǎng)局部變量生命周期的,延長(zhǎng)的同時(shí)可以在其他位置訪問(wèn)局部變量(不能訪問(wèn)就跟沒(méi)延長(zhǎng)一樣)。

閉包的形式就是在函數(shù)中對(duì)外開(kāi)放另一個(gè)方法使得其他地方(外部和內(nèi)部皆可)可以通過(guò)此方法來(lái)訪問(wèn)這個(gè)函數(shù)的局部變量。

例如:function abc(){

?????? let a=1;

?????? return function(b){

????????????? a=b;

????????????? console.log(a);

}

}

let func = abc();

func(4);

這時(shí)候會(huì)發(fā)現(xiàn)調(diào)用abc的時(shí)候產(chǎn)生的局部變量a,在函數(shù)執(zhí)行完后并沒(méi)有銷(xiāo)毀,而是可以通過(guò)返回的方法func進(jìn)行間接的修改。類(lèi)似這種保留局部變量并讀取或修改的方式就是閉包。

下面我將列舉一種閉包的實(shí)際用途。那就是面向切面的編程,尤其是不能修改源代碼卻需要進(jìn)行一定的侵入式修改和讀取的時(shí)候。

例如你想跟蹤你的代碼的執(zhí)行過(guò)程,或者說(shuō)是保留你代碼的執(zhí)行過(guò)程然后給其他程序進(jìn)行檢測(cè)和處理,那么這里就牽涉到了局部變量的保存,最簡(jiǎn)單的方式自然就是在程序的執(zhí)行過(guò)程中加入一些代碼使得程序形成閉包,然后得到閉包訪問(wèn)函數(shù)進(jìn)行訪問(wèn),此時(shí)外部的訪問(wèn)完全不影響內(nèi)部的執(zhí)行。甚至內(nèi)部已經(jīng)執(zhí)行完成了,但是留下了一堆閉包,這時(shí)候在外部只需要使用樹(shù)的遍歷的方式即可完成訪問(wèn)。

簡(jiǎn)而言之,試想你完成了一種遞歸的算法,后來(lái)發(fā)現(xiàn)你需要獲取遞歸過(guò)程中產(chǎn)生的數(shù)據(jù),而且是直接訪問(wèn)變量而不是變量的結(jié)果,此時(shí)就不能簡(jiǎn)單的在遞歸的過(guò)程中存儲(chǔ)中間結(jié)果,而是將內(nèi)部的中間結(jié)果保存為閉包。


閉包有什么用?的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
安阳市| 泰来县| 大理市| 隆回县| 清远市| 原平市| 盱眙县| 河曲县| 湖北省| 鄱阳县| 上饶县| 博爱县| 青州市| 岳池县| 保亭| 兴文县| 邵阳市| 龙游县| 陈巴尔虎旗| 平泉县| 吉木萨尔县| 睢宁县| 永靖县| 京山县| 太仆寺旗| 镇康县| 崇仁县| 湛江市| 五大连池市| 高台县| 福清市| 泸定县| 铁岭市| 沐川县| 孝义市| 壤塘县| 县级市| 龙泉市| 婺源县| 拜泉县| 濉溪县|