javascript基礎(chǔ)篇(6)之函數(shù)表達(dá)式閉包_javascript技巧

javascript基礎(chǔ)篇(6)之函數(shù)表達(dá)式閉包_javascript技巧

ID:30768827

大小:252.04 KB

頁數(shù):9頁

時(shí)間:2019-01-03

javascript基礎(chǔ)篇(6)之函數(shù)表達(dá)式閉包_javascript技巧_第1頁
javascript基礎(chǔ)篇(6)之函數(shù)表達(dá)式閉包_javascript技巧_第2頁
javascript基礎(chǔ)篇(6)之函數(shù)表達(dá)式閉包_javascript技巧_第3頁
javascript基礎(chǔ)篇(6)之函數(shù)表達(dá)式閉包_javascript技巧_第4頁
javascript基礎(chǔ)篇(6)之函數(shù)表達(dá)式閉包_javascript技巧_第5頁
資源描述:

《javascript基礎(chǔ)篇(6)之函數(shù)表達(dá)式閉包_javascript技巧》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫。

1、JavaScript基礎(chǔ)篇(6)之函數(shù)表達(dá)式閉包其實(shí)js支持函數(shù)閉包的主要原因是因?yàn)閖s需要函數(shù)能夠保存數(shù)據(jù)。這里的保存數(shù)據(jù)是只函數(shù)在運(yùn)行結(jié)束以后函數(shù)內(nèi)變量的值也會(huì)進(jìn)行保存。至于為什么js需要在函數(shù)內(nèi)可以保存數(shù)據(jù),那就是js是一種函數(shù)式語言。在函數(shù)內(nèi)保存數(shù)據(jù)是函數(shù)式語言的一大特征。回顧前面介紹過的三種定義函數(shù)方式functiosu(numnumreturnunum//函數(shù)聲明語法定義vasufunction(nunmum)returnunu//函數(shù)表達(dá)式定義vasuneFunction(〃nunT〃numz,,,returnunumz,)//Functio構(gòu)造

2、函數(shù)在分析閉包Z前我們先來看看,定義和調(diào)用函數(shù)容易犯的錯(cuò)誤。例1:saylliO;//錯(cuò)誤:函數(shù)還不存在varsayHi=function(){alert("test");};例2:if(true){functionsayHi(){alert(〃1〃);}}else{functionsayHi(){alert("2");}}saylliO;//打印結(jié)果并不是我們想要的例3:varfiml二functionfun2(){alert("test");fun2();//錯(cuò)誤:函數(shù)還不存在在例1中,我們不能在使用函數(shù)聲明式語法定義之前調(diào)用函數(shù)。解決方案:1.如果使用函

3、數(shù)表達(dá)式定義函數(shù)的話,需要在表達(dá)式定義后調(diào)用。varsaylli=function(){alert("test");};sayHi()2?使用函數(shù)聲明式。(這里瀏覽器引擎會(huì)函數(shù)聲明提升,在所有代碼執(zhí)行之前先讀取函數(shù)聲明)sayHi();functionsayHi(){alert("test");};在例2中,我們預(yù)期的結(jié)果應(yīng)該是打印1,實(shí)際結(jié)果是打印2。if(true){functionsayHi(){alert("1");}}else{functionsaylli(){alert("2");}}sayHi();//打印結(jié)果并不是我們想要的為什么會(huì)這樣?止因?yàn)?/p>

4、函數(shù)聲明提升,所以瀏覽器在預(yù)解析的時(shí)候不會(huì)判斷if條件,直接解析第二個(gè)函數(shù)定義的時(shí)候覆蓋了第一個(gè)。解決方案:varsayHi;if(true){sayHi=function(){alert(T‘);}}else{saylli=function(){alert(〃2〃);}}sayHi();在例3中,發(fā)現(xiàn)只能只用fun1()調(diào)用,而不能使用fun2()調(diào)用。我自己的理解,真正原因不知道。沒找到資料。因?yàn)?:functionfun3(){};等效與varfun3=functionfun3(){};如圖:un3:functionfur)3()arguments:nu

5、llcalle^:null:0圖二debugger;functionvar

6、fun3natre:口ptttpe:fun3proto:function()?innu(rcna所以只能只用funlO調(diào)用,而不能使用fun2()調(diào)用。其實(shí)這里我述是有疑問的?哪位大神知道,望告知。既然,fun2在外面不能調(diào)用為什么在函數(shù)內(nèi)部能調(diào)用?雖然在debugger還是得不到funlo0涵敎乘達(dá)xC.htmlXEDft?UAsync?Servingfromthefilesystem?Addyourfilesintotheworkspace,mone▼Watch丁千uni:〈no

7、七availBbl已〉

8、vCallStackfun1vari=0;.varFun2=-Functionfunl](){ifif#空土debugs?1*i}他n2C);Nev“showK雖然闊試到亦1是不可用的。但罡■在代馮里面還是可以正常嵐疔。(anonymousfunction)▼Scope▼LQC91?this:Window?GlobaL好了,通過上面的三道題目熱身。我們繼續(xù)今犬的主題“閉包”O(jiān)1?什么是閉包?定義:就是冇權(quán)訪問另一個(gè)函數(shù)作用域的變量的函數(shù)我們先從一個(gè)示例函數(shù)開始:例1:functionfun(){vara二"弓長(zhǎng)三〃;}fun();//在

9、我們執(zhí)行完后,變量a就被標(biāo)記為銷毀了例2:functionfun(){vara二〃張三〃;rcturnfunction(){alert("test");}}varf二fun();//同樣,在我們執(zhí)行完后,變量a就被標(biāo)記為銷毀了例3:functionfun(){vara二"張三〃;returnfunction(){alert(a);}varf=fun();//【現(xiàn)在情況發(fā)生變化了,如果&被銷毀,顯然f被調(diào)用的話就不能訪問到變量3的值了】f();//【然后變量a的值正常的被訪問到了】//這就是閉包,當(dāng)函數(shù)A返冋的函數(shù)B里面使用到了函數(shù)A的變量,那么函數(shù)B就使用了閉

10、包。示例:functionfun(){

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動(dòng)畫的文件,查看預(yù)覽時(shí)可能會(huì)顯示錯(cuò)亂或異常,文件下載后無此問題,請(qǐng)放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負(fù)責(zé)整理代發(fā)布。如果您對(duì)本文檔版權(quán)有爭(zhēng)議請(qǐng)及時(shí)聯(lián)系客服。
3. 下載前請(qǐng)仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時(shí)可能由于網(wǎng)絡(luò)波動(dòng)等原因無法下載或下載錯(cuò)誤,付費(fèi)完成后未能成功下載的用戶請(qǐng)聯(lián)系客服處理。