先上段程式碼:
//函数a function a() { var i=0; //函数b function b() { alert(++i); } return b; } //函数c var c = a(); c();
程式碼特點:
1、函數b嵌套在函數a內部;
2、函數a返回函數b。
程式碼中函數a的內部函數b,被函數a外面的一個變數c引用的時候,這就叫創建了一個閉包。有時候函數b也可以用一個匿名函數代替來返回,即return function(){};
優點:1.保護函數內的變數安全,加強了封裝性 2.在記憶體中維持一個變數(用的太多就變成了缺點,佔記憶體)
閉包之所以會佔用資源是當函數a執行結束後, 變數i不會因為函數a的結束而銷毀, 因為b的執行需要依賴a中的變數。
不適合場景:傳回閉包的函數是個非常大的函數
閉包的典型框架應該就是jquery了。
閉包是javascript語言的一大特點,主要應用閉包場合主要是為了:設計私有的方法和變數。
這在做框架的時候體現更明顯,有些方法和屬性只是運算邏輯過程中的使用的,不想讓外部修改這些屬性,因此就可以設計一個閉包來只提供方法獲取。
閉包的缺點就是常駐內存,會增加內存使用量,使用不當很容易造成內存洩漏。
總結一下:
優點:
1. 邏輯連續,當閉包作為另一個函數呼叫的參數時,避免你脫離當前邏輯而單獨編寫額外邏輯。
2. 方便呼叫上下文的局部變數。
3. 加強封裝性,第2點的延伸,可以達到變數的保護作用。
缺點:
閉包有一個非常嚴重的問題,那就是內存浪費問題,這個內存浪費不僅僅因為它常駐內存,更重要的是,對閉包的使用不當會造成無效內存的產生,看下面的例:
var array = []; function abc() { var foo = function(){ } array.push(foo); return foo; } for(var i = 0 ; i < 10000; i ++) { abc(); } alert(array[0] == array[1]);
透過上面的測試我們會看到這一萬次abc()執行所產生的同一個邏輯的閉包的地址並不相同,也就是說它生產了一堆的一模一樣的Function對象,這樣有好處就是可以以工廠模式產生函數以備使用,然而如果你的稍有不慎將閉包當作常態邏輯使用,就不可避免的會造成記憶體垃圾。當中換個語法可能更好理解:
var foo = new Function();
所以關於閉包,就我自己的習慣而言,能不用就不用,如果非用不可,那就想辦法保持閉包對象的數量很少甚至唯一。
以上所述就是本文的全部內容了,希望大家能夠喜歡。

JavaScript的最新趨勢包括TypeScript的崛起、現代框架和庫的流行以及WebAssembly的應用。未來前景涵蓋更強大的類型系統、服務器端JavaScript的發展、人工智能和機器學習的擴展以及物聯網和邊緣計算的潛力。

JavaScript是現代Web開發的基石,它的主要功能包括事件驅動編程、動態內容生成和異步編程。 1)事件驅動編程允許網頁根據用戶操作動態變化。 2)動態內容生成使得頁面內容可以根據條件調整。 3)異步編程確保用戶界面不被阻塞。 JavaScript廣泛應用於網頁交互、單頁面應用和服務器端開發,極大地提升了用戶體驗和跨平台開發的靈活性。

Python更适合数据科学和机器学习,JavaScript更适合前端和全栈开发。1.Python以简洁语法和丰富库生态著称,适用于数据分析和Web开发。2.JavaScript是前端开发核心,Node.js支持服务器端编程,适用于全栈开发。

JavaScript不需要安裝,因為它已內置於現代瀏覽器中。你只需文本編輯器和瀏覽器即可開始使用。 1)在瀏覽器環境中,通過標籤嵌入HTML文件中運行。 2)在Node.js環境中,下載並安裝Node.js後,通過命令行運行JavaScript文件。

如何在Quartz中提前發送任務通知在使用Quartz定時器進行任務調度時,任務的執行時間是由cron表達式設定的。現�...

在JavaScript中如何獲取原型鏈上函數的參數在JavaScript編程中,理解和操作原型鏈上的函數參數是常見且重要的任�...

在微信小程序web-view中使用Vue.js動態style位移失效的原因分析在使用Vue.js...

在Tampermonkey中如何對多個鏈接進行並發GET請求並依次判斷返回結果?在Tampermonkey腳本中,我們經常需要對多個鏈...


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

WebStorm Mac版
好用的JavaScript開發工具

禪工作室 13.0.1
強大的PHP整合開發環境

SublimeText3 英文版
推薦:為Win版本,支援程式碼提示!

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

DVWA
Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中