關(guān)于JS中的閉包淺談
個人見解:在函數(shù)體內(nèi)定義另外的方法函數(shù),而這個方法函數(shù)被函數(shù)以外的變量引用,這時就形成了閉包!
可能這樣的理解也太抽象了,并不是那么簡單易懂!實例吧:
<script type="text/javascript">
function A(){
var S=0;
function B(){
alert(++S);
}
return B;
}
var C=A();
C();
</script>
上面這一段代碼就創(chuàng)建了一個閉包,因為當(dāng)函數(shù)執(zhí)行到var C=A();時,表面上看C指向的是A函數(shù),而實際上C所指向的函數(shù)是B函數(shù),所以再執(zhí)行到C()的時候就會輸出2;這樣的話B函數(shù)就被A函數(shù)以外的變量引用了,根據(jù)個人見解,創(chuàng)建了一個閉包!
當(dāng)我在小小的了解了什么時候閉包后也順便看了哈閉包的用途,據(jù)說閉包的用途主要有兩點:
1、可以讀取函數(shù)內(nèi)部的變量
2、讓這些變量始終保持在內(nèi)存中
<script type="text/javascript">
function A(){
var S=1;
D=function(){
S+=1;
}
function B(){
alert(S);
}
return B;
}
var C=A();
C(); // 輸出1
D();
C(); // 輸出2
</script>
上面的代碼中C指向的還是是B函數(shù),C執(zhí)行了兩次,第一次輸出1,第二次輸出2,這證明了S一直被保存在內(nèi)存中,并沒有在A函數(shù)在被調(diào)用后自動清除,這是為什么呢,原因是因為B函數(shù)被賦給了一個全局變量,這導(dǎo)致了B函數(shù)一直在內(nèi)存中,而B函數(shù)的執(zhí)行又需要依賴著A函數(shù),所以A也一直在內(nèi)存中,不會在調(diào)用結(jié)束后被回收?。ㄟ@樣的理解貌似有點不專業(yè))!
表達完畢,請廣大群眾多多指教!
相關(guān)文章
淺談JavaScript中的Math.atan()方法的使用
這篇文章主要介紹了JavaScript中的Math.atan()方法的使用,是JS入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下2015-06-06
JavaScript創(chuàng)建對象的七種方式全面總結(jié)
這篇文章主要介紹了JavaScript創(chuàng)建對象的七種方式,工廠模式,構(gòu)造函數(shù)模式,原型模式等分別在本文中做出了講解,具體操作步驟大家可查看下文的詳細(xì)講解,感興趣的小伙伴們可以參考一下。2017-08-08
javascript基礎(chǔ)數(shù)據(jù)類型轉(zhuǎn)換教程示例
總結(jié)了javascipt中的數(shù)據(jù)類型之后,我們就了解了,prompt()接收的全是字符串,因此數(shù)據(jù)類型轉(zhuǎn)換就顯得尤為重要,一起來學(xué)習(xí)一下吧2022-03-03
JavaScript 學(xué)習(xí)筆記(九)call和apply方法
兩者實現(xiàn)的功能是完全一樣的,只是參數(shù)傳遞方式不一樣,call是將各個參數(shù)以逗號(,)隔開,而apply是將所有參數(shù)組成一個數(shù)組進行傳遞。2010-01-01
JavaScript中的toLocaleDateString()方法使用簡介
這篇文章主要介紹了JavaScript中的toLocaleDateString()方法使用簡介,是JS入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下2015-06-06
js nextSibling屬性和previousSibling屬性概述及使用注意
nextSibling屬性:該屬性表示當(dāng)前節(jié)點的下一個節(jié)點;如果其后沒有與其同級的節(jié)點,則返回null;previousSibling屬性:該屬性與nextSibling屬性的作用正好相反,接下來將詳細(xì)介紹下,感興趣的你不妨了解下哦,或許對你有所幫助2013-02-02

