淺析js閉包函數(shù)和回調(diào)函數(shù)

一.閉包函數(shù):

閉包是js中的一大特色,也是一大難點(diǎn)械媒。簡(jiǎn)單來說,所謂閉包就是說,一個(gè)函數(shù)能夠訪問其函數(shù)外部作用域中的變量纷捞。

閉包的三大特點(diǎn)為:

1痢虹、函數(shù)嵌套函數(shù)

2、內(nèi)部函數(shù)可以訪問外部函數(shù)的變量

3主儡、參數(shù)和變量不會(huì)被回收奖唯。

閉包是指有權(quán)訪問另一個(gè)函數(shù)作用域中的變量的函數(shù),創(chuàng)建閉包的最常見的方式就是在一個(gè)函數(shù)內(nèi)創(chuàng)建另一個(gè)函數(shù)糜值,通過另一個(gè)函數(shù)訪問這個(gè)函數(shù)的局部變量丰捷。使用閉包有一個(gè)優(yōu)點(diǎn),也是它的缺點(diǎn)寂汇,就是可以把局部變量駐留在內(nèi)存中瓢阴,可以避免使用全局變量。全局變量在每個(gè)模塊都可調(diào)用健无,這勢(shì)必將是災(zāi)難性的。所以推薦使用私有的液斜,封裝的局部變量累贤。一般函數(shù)執(zhí)行完畢后,局部活動(dòng)對(duì)象就被銷毀少漆,內(nèi)存中僅僅保存全局作用域臼膏。但閉包的情況不同!

代碼示例:

bk1.png

這個(gè)例子中示损,變量a在test方法外部是無法訪問的渗磅,但test方法里面,嵌套了一個(gè)匿名函數(shù)检访,通過return返回始鱼,test作用域中的變量a,可以在匿名函數(shù)中訪問脆贵。并且當(dāng)test方法執(zhí)行后医清,變量a所占內(nèi)存并不會(huì)釋放,以達(dá)到嵌套的函數(shù)還可以訪問的目的卖氨。

javascript的垃圾回收原理:
(1)会烙、在javascript中,如果一個(gè)對(duì)象不再被引用筒捺,那么這個(gè)對(duì)象就會(huì)被GC回收柏腻;
(2)、如果兩個(gè)對(duì)象互相引用系吭,而不再被第3者所引用五嫂,那么這兩個(gè)互相引用的對(duì)象也會(huì)被回收。

那么使用閉包有什么好處呢村斟?使用閉包的好處是:
1.希望一個(gè)變量長(zhǎng)期駐扎在內(nèi)存中
2.避免全局變量的污染
3.私有成員的存在

二.回調(diào)函數(shù)

百度百科:回調(diào)函數(shù)就是一個(gè)通過函數(shù)指針調(diào)用的函數(shù)贫导。如果你把函數(shù)的指針(地址)作為參數(shù)傳遞給另一個(gè)函數(shù)抛猫,當(dāng)這個(gè)指針被用為調(diào)用它所指向的函數(shù)時(shí),我們就說這是回調(diào)函數(shù)孩灯」虢穑回調(diào)函數(shù)不是由該函數(shù)的實(shí)現(xiàn)方直接調(diào)用,而是在特定的事件或條件發(fā)生時(shí)由另外的一方調(diào)用的峰档,用于對(duì)該事件或條件進(jìn)行響應(yīng)败匹。

在JavaScript中,回調(diào)函數(shù)具體的定義為:函數(shù)A作為參數(shù)(函數(shù)引用)傳遞到另一個(gè)函數(shù)B中讥巡,并且這個(gè)函數(shù)B執(zhí)行函數(shù)A掀亩。我們就說函數(shù)A叫做回調(diào)函數(shù)。如果沒有名稱(函數(shù)表達(dá)式)欢顷,就叫做匿名回調(diào)函數(shù)槽棍。

回調(diào)函數(shù)原理:我現(xiàn)在出發(fā),到了通知你”抬驴。這是一個(gè)異步的流程炼七,“我出發(fā)”這個(gè)過程中(函數(shù)執(zhí)行),“你”可以去做任何事布持,“到了”(函數(shù)執(zhí)行完畢)“通知你”(回調(diào))進(jìn)行之后的流程豌拙。

代碼示例:

bk2.png

前段時(shí)間碰到一個(gè)關(guān)于數(shù)組排序公共方法的問題,排序方式(從小到大或從大到刑馀)是調(diào)用該排序方法的人決定按傅。實(shí)現(xiàn)該排序方法可以用回調(diào)來實(shí)現(xiàn),當(dāng)然你可以寫2個(gè)方法胧卤,一個(gè)是從小到大的排序唯绍,一個(gè)是從大到小的排序方法。下面示例代碼就是回調(diào)的典型使用場(chǎng)合:

bk3.png

回調(diào)函數(shù)的適用場(chǎng)合:

資源加載:動(dòng)態(tài)加載js文件后執(zhí)行回調(diào)灌侣,加載iframe后執(zhí)行回調(diào)推捐,ajax操作回調(diào),圖片加載完成執(zhí)行回調(diào)侧啼,AJAX等等牛柒。
DOM事件及Node.js事件基于回調(diào)機(jī)制(Node.js回調(diào)可能會(huì)出現(xiàn)多層回調(diào)嵌套的問題)。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末痊乾,一起剝皮案震驚了整個(gè)濱河市皮壁,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌哪审,老刑警劉巖蛾魄,帶你破解...
    沈念sama閱讀 216,324評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡滴须,警方通過查閱死者的電腦和手機(jī)舌狗,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,356評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來扔水,“玉大人痛侍,你說我怎么就攤上這事∧校” “怎么了主届?”我有些...
    開封第一講書人閱讀 162,328評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)待德。 經(jīng)常有香客問我君丁,道長(zhǎng),這世上最難降的妖魔是什么将宪? 我笑而不...
    開封第一講書人閱讀 58,147評(píng)論 1 292
  • 正文 為了忘掉前任绘闷,我火速辦了婚禮,結(jié)果婚禮上较坛,老公的妹妹穿的比我還像新娘簸喂。我一直安慰自己,他們只是感情好燎潮,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,160評(píng)論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著扼倘,像睡著了一般确封。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上再菊,一...
    開封第一講書人閱讀 51,115評(píng)論 1 296
  • 那天爪喘,我揣著相機(jī)與錄音,去河邊找鬼纠拔。 笑死秉剑,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的稠诲。 我是一名探鬼主播侦鹏,決...
    沈念sama閱讀 40,025評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼臀叙!你這毒婦竟也來了略水?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,867評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤劝萤,失蹤者是張志新(化名)和其女友劉穎渊涝,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,307評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡跨释,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,528評(píng)論 2 332
  • 正文 我和宋清朗相戀三年胸私,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片鳖谈。...
    茶點(diǎn)故事閱讀 39,688評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡岁疼,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出蚯姆,到底是詐尸還是另有隱情五续,我是刑警寧澤,帶...
    沈念sama閱讀 35,409評(píng)論 5 343
  • 正文 年R本政府宣布龄恋,位于F島的核電站疙驾,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏郭毕。R本人自食惡果不足惜它碎,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,001評(píng)論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望显押。 院中可真熱鬧扳肛,春花似錦、人聲如沸乘碑。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,657評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽兽肤。三九已至套腹,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間资铡,已是汗流浹背电禀。 一陣腳步聲響...
    開封第一講書人閱讀 32,811評(píng)論 1 268
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留笤休,地道東北人尖飞。 一個(gè)月前我還...
    沈念sama閱讀 47,685評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像店雅,于是被迫代替她去往敵國(guó)和親政基。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,573評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容