摘要:注意匿名函數(shù)自執(zhí)行只是產(chǎn)生閉包的一種情況,閉包是現(xiàn)象或者情形,不實(shí)用匿名函數(shù)自執(zhí)行也有很多情況產(chǎn)生閉包,所以而且根本就是兩回事兒,不能混淆。小測(cè)驗(yàn),你能看出下面的程序用了閉包嗎閉包在中使用。閉包無處不在,直接看的例子。
通過文你將學(xué)到:
概述1.閉包是怎么回事兒?
2.閉包的原理和在jquery中的應(yīng)用
3.從一到面試題徹底理解閉包和垃圾回收機(jī)制
4.閉包在jquery中的應(yīng)用
經(jīng)常聽到閉包這個(gè)詞兒,或者匿名函數(shù)自執(zhí)行,之類的。到底他們是一個(gè)東西嗎?
1.什么是閉包?? 我不想扣定義,直接上例子。
function parent(firstname){ return function(lastname){ console.log(firstname+"·屌·"+lastname); } } parent("尼古拉斯")("大彬哥");
看圖:
函數(shù)執(zhí)行完以后會(huì)銷毀(這里我就不談堆棧操作了理解圖就行了),然后各種變量會(huì)垃圾回收,而這里parent函數(shù)確實(shí)銷毀了,但是firstName這個(gè)參數(shù)并沒有垃圾回收,釋放內(nèi)存,依然在內(nèi)存中能夠被return里面的函數(shù)使用,好像return里面的函數(shù)把 父函數(shù)的那個(gè)資源給關(guān)閉在了自己的函數(shù)里面一樣,這個(gè)函數(shù)銷毀資源被關(guān)閉到子函數(shù)中依然能夠使用的現(xiàn)象叫做閉包。
注意匿名函數(shù)自執(zhí)行只是產(chǎn)生閉包的一種情況,閉包是現(xiàn)象或者情形,不實(shí)用匿名函數(shù)自執(zhí)行也有很多情況產(chǎn)生閉包,所以而且根本就是兩回事兒,不能混淆。
類比,在window系統(tǒng)中,你子文件夾中有使用的文件父文件夾是沒法刪除的。
2.實(shí)際應(yīng)用,情況很多,先來一道面試題。function fn{ var arr = []; for(var i = 0;i<3;i++){ arr.push(function(){ console.log(i); }); } return arr; } var arrFn = fn(); arrFn[0]();//3 arrFn[1]();//3 arrFn[2]();//3
與這個(gè)類似的一個(gè)題是循環(huán)里面用事件,事件里面的i有問題,如下。
for(var i = 0;i還有一到非常愛考的面試題,
for(var i = 0;i<3;i++){ setTimeout(function(){ alert(i); }); }我只分析一個(gè),其它的大家就會(huì)分析了。注意表象上粗略的理解就是 函數(shù)執(zhí)行一瞬間,并不會(huì)等定時(shí)器,但是這個(gè)說法并不對(duì),因?yàn)榈谝粋€(gè)就說不通。好我給記大家進(jìn)入內(nèi)部深入分析下過程。
記住一句話,函數(shù)定義壓入arr的時(shí)候并沒有執(zhí)行。
小測(cè)驗(yàn),你能看出下面的程序用了閉包嗎?
function show(){ var a = 12; setTimeout(function(){ console.log(a); },1000); }3.閉包在jquery中使用。
閉包無處不在,直接看jquery的例子。
$("#btn").click(function(){ var json = {}; ajax(url,function(data){ json =dada; }); });
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/82595.html
摘要:大家想想怎么做什么是匿名函數(shù)自執(zhí)行并如何在實(shí)際庫中應(yīng)用匿名函數(shù)自執(zhí)行,注意,注意,只有這個(gè)名字和沒有其它名字,比如封閉空間,這個(gè)是為了讓大家好理解自己造的詞語。 通過本節(jié)課你將學(xué)到: 1.什么是函數(shù)表達(dá)式和函數(shù)聲明 2.first-class function 3.引用和復(fù)制的區(qū)別 4.函數(shù)傳參是怎么回事兒 5.關(guān)于函數(shù)的this和arguments 6.什么是匿名函數(shù)自執(zhí)行并如何在...
摘要:大彬哥版權(quán)所有翻錄必究尼古拉斯屌大彬哥群尼古拉斯屌大彬哥函數(shù)聲明函數(shù)表達(dá)式是不是簡(jiǎn)單的讓人發(fā)指區(qū)別就一句話,函數(shù)聲明,可以在函數(shù)調(diào)用之后,因?yàn)橛泻瘮?shù)預(yù)解析。而函數(shù)表達(dá)式必須在調(diào)用之前。 通過前三課講解,大家應(yīng)該能做到 1.手里有一份隨時(shí)能夠換工作自信的簡(jiǎn)歷 2.知道了學(xué)習(xí)js的正確姿勢(shì) 3.理解了全局對(duì)象、全局上下文、知道有預(yù)解析同時(shí)做了至少50道面試題 4.能熟練的使用json構(gòu)建...
摘要:忍者級(jí)別的函數(shù)操作對(duì)于什么是匿名函數(shù),這里就不做過多介紹了。我們需要知道的是,對(duì)于而言,匿名函數(shù)是一個(gè)很重要且具有邏輯性的特性。通常,匿名函數(shù)的使用情況是創(chuàng)建一個(gè)供以后使用的函數(shù)。 JS 中的遞歸 遞歸, 遞歸基礎(chǔ), 斐波那契數(shù)列, 使用遞歸方式深拷貝, 自定義事件添加 這一次,徹底弄懂 JavaScript 執(zhí)行機(jī)制 本文的目的就是要保證你徹底弄懂javascript的執(zhí)行機(jī)制,如果...
javascript -- 回調(diào)函數(shù) 在高級(jí)語言層出不窮的年代, 各個(gè)語言都號(hào)稱有著一切皆為對(duì)象的自豪說法, 而 js 作為一門腳本語言卻相對(duì)于java等傳統(tǒng)面向?qū)ο笳Z言有很大的不同之處, 除了 js 詭異的繼承體系之外, 最令人著迷的一個(gè)特性就是回調(diào)函數(shù), 當(dāng)然也有很多人對(duì)他詬病, 筆者認(rèn)為 回調(diào)函數(shù) 和 異步 是js語言特性的兩大最為突出的店, 當(dāng)然正如所有優(yōu)點(diǎn)需要滿足自我的需求, 這個(gè)世界...
閱讀 1080·2021-11-23 09:51
閱讀 2420·2021-09-29 09:34
閱讀 3161·2019-08-30 14:20
閱讀 1070·2019-08-29 14:14
閱讀 3191·2019-08-29 13:46
閱讀 1087·2019-08-26 13:54
閱讀 1643·2019-08-26 13:32
閱讀 1435·2019-08-26 12:23