最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳談JavaScript的閉包及應用

 更新時間:2017年01月17日 11:33:45   作者:坦蕩  
本文主要介紹了JavaScript的閉包及應用。具有一定的參考價值,下面跟著小編一起來看下吧

閉包真的是學過一遍又一遍,Js博大精深,每次學習都感覺有新的收獲。相信在大家封裝前端插件時,閉包是必不可少的。閉包的真正好處我個人認為除了封裝還是封裝,能帶個我們私有方法,和調(diào)用上的靈活方便,也會使你的代碼對外的對象保持干凈整潔。

進入正題

維基百科這樣定義了JS閉包:在計算機科學中,閉包(英語:Closure),又稱詞法閉包(Lexical Closure)或函數(shù)閉包(function closures),是引用了自由變量的函數(shù)。這個被引用的自由變量將和這個函數(shù)一同存在,即使已經(jīng)離開了創(chuàng)造它的環(huán)境也不例外。所以,有另一種說法認為閉包是由函數(shù)和與其相關(guān)的引用環(huán)境組合而成的實體。閉包在運行時可以有多個實例,不同的引用環(huán)境和相同的函數(shù)組合可以產(chǎn)生不同的實例。

通俗的講,閉包不同于一般函數(shù),它允許一個函數(shù)在立即此法調(diào)用的作用域外,仍可訪問非本地變量。我還想說,閉包的語法讓你的代碼更加動感,下面的一段代碼可能會讓你有所感觸。

<script>
 (function () {
 var userToken = "this is my token";
 var someConfig = "opening some function";
 var privateValue = "private";
 var publicValue = "public";
 var appObj = {};
 function myPrivateFunc() {
 alert(privateValue)
 }
 appObj.getUserToken = function () {
 //some logic
 userToken += " after some inner logic";
 return userToken;
 }
 appObj.publicVal = publicValue;
 window.application = appObj;
 }());//立即執(zhí)行
 console.log(application.getUserToken());//this is my token after some inner logic
 console.log(application.publicVal);//public
 console.log(application.privateValue); //undefined
 application.myPrivateFunc(); //error
 </script>

我將appObj附加到window下面,我通常喜歡定義一個全局的名為application的對象,代表著整個應用公用的頂級對象,你可以在其中向外暴露很多公共的操作方法,也可以在其中做一些私有的處理,以防外部調(diào)用導致某些問題。在所定義的“頂級”application對象下,你也可以將你所非要不可的全局變量定義在其中,這樣以防普通全局變量對應用造成的影響,又可以在你定義的閉包內(nèi),通過向外暴露的對象表達更明確的信息,我一直認為,隨隨便便定義一個JS全局變量實在是太可恥了。

閉包的寫法加上VS強大的智能提示,你會感覺到無比的暢快。下面我又附加了一個方法

(function () {
 var baseUrl = "www.cnblogs.com/tdws/";

 application.getBaseUrl = function () {
 return baseUrl;
 }
 }());
 console.log(application.getBaseUrl());//www.cnblogs.com/tdws/

寫在最后

你不覺得把變量保留起來,暴露出一系列g(shù)et方法,很動感嗎 ╮(╯-╰)╭ 攤手......

當然閉包也需要你恰當?shù)氖褂茫?span style="color: #ff0000">不要造成循環(huán)引用,因為它將導致內(nèi)存泄漏。不要做無謂的閉包,造成你空間的浪費,因為閉包不會被釋放。不要處處閉包,因為它將增加你代碼的復雜性。

以上就是本文的全部內(nèi)容,希望本文的內(nèi)容對大家的學習或者工作能帶來一定的幫助,同時也希望多多支持腳本之家!

相關(guān)文章

  • JavaScript單鏈表詳解與實現(xiàn)

    JavaScript單鏈表詳解與實現(xiàn)

    鏈表是一種數(shù)據(jù)結(jié)構(gòu),用于存儲和組織一系列元素,這些元素以節(jié)點的形式連接在一起,每個節(jié)點包含數(shù)據(jù)和一個指向下一個節(jié)點的引用,鏈表可以分為單鏈表、雙鏈表和循環(huán)鏈表等不同類型,但在本文中,我們將重點關(guān)注單鏈表,需要的朋友可以參考下
    2023-09-09
  • 詳解JS如何使用Promise緩存網(wǎng)絡請求

    詳解JS如何使用Promise緩存網(wǎng)絡請求

    網(wǎng)絡請求是現(xiàn)代Web應用中的常見操作,很多時候需要獲取服務器上的數(shù)據(jù),在進行網(wǎng)絡請求時,為了減輕服務器的壓力,緩存策略常被用來避免對同一數(shù)據(jù)的重復請求,本文將探討如何使用Promise結(jié)合緩存來高效處理網(wǎng)絡請求,需要的朋友可以參考下
    2023-12-12
  • 全面解析Bootstrap表單使用方法(表單控件狀態(tài))

    全面解析Bootstrap表單使用方法(表單控件狀態(tài))

    這篇文章全面解析了Bootstrap表單的使用方法,本文重點介紹Bootstrap表單控件狀態(tài)的三種情況,感興趣的小伙伴們可以參考一下
    2015-11-11
  • js防抖和節(jié)流的深入講解

    js防抖和節(jié)流的深入講解

    這篇文章主要給大家介紹了關(guān)于js防抖和節(jié)流的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用js具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2018-12-12
  • JavaScript 代碼壓縮工具小結(jié)

    JavaScript 代碼壓縮工具小結(jié)

    為了使頁面更快的完成加載,經(jīng)常需要對javascript/css代碼進行壓縮以減小體積,這里簡單列一下用過的壓縮工具,同時也作為存檔
    2012-02-02
  • JS常見構(gòu)造模式實例對比分析

    JS常見構(gòu)造模式實例對比分析

    這篇文章主要介紹了JS常見構(gòu)造模式,結(jié)合實例形式對比分析了工廠模式、構(gòu)造函數(shù)模式、原型模式、寄生構(gòu)造函數(shù)模式、穩(wěn)妥構(gòu)造函數(shù)模式等相關(guān)概念、原理、實現(xiàn)方法與相關(guān)操作技巧,需要的朋友可以參考下
    2018-08-08
  • ES6中如何使用Set和WeakSet

    ES6中如何使用Set和WeakSet

    這篇文章主要為大家詳細介紹了ES6中如何使用Set和WeakSet的相關(guān)資料,感興趣的小伙伴們可以參考一下
    2016-03-03
  • JS實現(xiàn)物體帶緩沖的間歇運動效果示例

    JS實現(xiàn)物體帶緩沖的間歇運動效果示例

    這篇文章主要介紹了JS實現(xiàn)物體帶緩沖的間歇運動效果,可實現(xiàn)物體定時間歇運動的功能,涉及javascript定時器、數(shù)學運算及頁面元素動態(tài)修改的相關(guān)操作技巧,需要的朋友可以參考下
    2016-12-12
  • ES6 Promise對象概念及用法實例詳解

    ES6 Promise對象概念及用法實例詳解

    這篇文章主要介紹了ES6 Promise對象概念及用法,結(jié)合實例形式詳細分析了ES6中Promise對象的概念、原理、創(chuàng)建、使用方法及相關(guān)操作注意事項,需要的朋友可以參考下
    2019-10-10
  • webpack -v報錯解決方案

    webpack -v報錯解決方案

    這篇文章主要介紹了webpack -v報錯解決方案,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-09-09

最新評論

新兴县| 临沭县| 报价| 易门县| 白朗县| 邵东县| 蓬莱市| 专栏| 宜春市| 乌鲁木齐市| 津南区| 嘉义市| 东莞市| 鸡泽县| 额济纳旗| 贡嘎县| 中阳县| 沂南县| 永昌县| 神池县| 泰兴市| 钟山县| 渭南市| 宁波市| 甘德县| 海晏县| 塘沽区| 榆树市| 额敏县| 梅河口市| 文化| 海淀区| 呼伦贝尔市| 岳阳市| 沁源县| 芮城县| 兴义市| 富宁县| 禄丰县| 凭祥市| 阳信县|