首頁 web前端 js教程 js閉包所用的場合以及優缺點分析_javascript技巧

js閉包所用的場合以及優缺點分析_javascript技巧

May 16, 2016 pm 03:53 PM
js 優缺點 閉包

先上段程式碼:

//函数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();

登入後複製

所以關於閉包,就我自己的習慣而言,能不用就不用,如​​果非用不可,那就想辦法保持閉包對象的數量很少甚至唯一。

以上所述就是本文的全部內容了,希望大家能夠喜歡。

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

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

熱門話題

Java教學
1664
14
CakePHP 教程
1422
52
Laravel 教程
1316
25
PHP教程
1268
29
C# 教程
1240
24
建議:優秀JS開源人臉偵測辨識項目 建議:優秀JS開源人臉偵測辨識項目 Apr 03, 2024 am 11:55 AM

人臉偵測辨識技術已經是一個比較成熟且應用廣泛的技術。而目前最廣泛的網路應用語言非JS莫屬,在Web前端實現人臉偵測辨識相比後端的人臉辨識有優勢也有弱勢。優點包括減少網路互動、即時識別,大大縮短了使用者等待時間,提高了使用者體驗;弱勢是:受到模型大小限制,其中準確率也有限。如何在web端使用js實現人臉偵測呢?為了實現Web端人臉識別,需要熟悉相關的程式語言和技術,如JavaScript、HTML、CSS、WebRTC等。同時也需要掌握相關的電腦視覺和人工智慧技術。值得注意的是,由於Web端的計

模板化的優點和缺點有哪些? 模板化的優點和缺點有哪些? May 08, 2024 pm 03:51 PM

模板化:優點與缺點模板化是一種強大的程式設計技術,可讓您建立可重複使用的程式碼區塊。它提供了一系列優點,但也存在一些缺點。優點:程式碼重用性:模板化可讓您建立通用程式碼,可在整個應用程式中重複使用,從而減少重複和維護工作。一致性:模板化確保程式碼段在不同位置以相同的方式實現,從而提高程式碼一致性和可讀性。可維護性:對範本的變更會同時反映在所有使用它的程式碼中,簡化了維護和更新流程。效率:模板化可以節省時間和精力,因為您不必重複編寫相同的程式碼。靈活性:模板化可讓您建立可設定的程式碼區塊,可輕鬆適應不同的應用程式需求。缺點

C++ lambda 表達式中閉包的意思是什麼? C++ lambda 表達式中閉包的意思是什麼? Apr 17, 2024 pm 06:15 PM

在C++中,閉包是能夠存取外部變數的lambda表達式。若要建立閉包,請擷取lambda表達式中的外部變數。閉包提供可重複使用性、資訊隱藏和延遲求值等優點。它們在事件處理程序等實際情況中很有用,其中即使外部變數被銷毀,閉包仍然可以存取它們。

選購系統前必看:Win11和Win10優缺點分析 選購系統前必看:Win11和Win10優缺點分析 Mar 28, 2024 pm 01:33 PM

在當今資訊時代,個人電腦作為我們日常生活中不可或缺的工具,扮演著重要的角色。作業系統作為電腦的核心軟體之一,更是影響我們的使用體驗以及工作效率。在市場上,微軟公司的Windows作業系統一直佔據主導地位,而現在人們面臨的選擇則是最新的Windows11和舊有的Windows10。對於一般消費者來說,在選擇作業系統時不只是看版本號,更要了解其優缺點。

Java Servlet的工作原理有什麼優缺點? Java Servlet的工作原理有什麼優缺點? Apr 16, 2024 pm 03:18 PM

JavaServlet是一種Java類,用於建立動態網頁,作為客戶端和伺服器的橋樑。工作原理:接收請求、初始化Servlet、處理請求、產生回應和關閉Servlet。優點:可移植、可擴展、安全且易於使用。缺點:開銷、耦合和狀態管理。實戰案例:建立一個簡單的Servlet來顯示"Hello,Servlet!"訊息。

C++ 函式中閉包的優點和缺點是什麼? C++ 函式中閉包的優點和缺點是什麼? Apr 25, 2024 pm 01:33 PM

閉包是一種巢狀函數,它能存取外層函數作用域的變量,優點包括資料封裝、狀態保持和靈活性。缺點包括記憶體消耗、效能影響和調試複雜性。此外,閉包還可以建立匿名函數,並將其作為回調或參數傳遞給其他函數。

PHP框架的優缺點比較:選哪個好? PHP框架的優缺點比較:選哪個好? Jun 04, 2024 pm 03:36 PM

PHP框架的選擇取決於專案需求和開發者技能:Laravel:功能豐富,社群活躍,但學習曲線陡峭,效能開銷高。 CodeIgniter:輕量級,易於擴展,但功能有限,文件較少。 Symfony:模組化,社群強大,但複雜,效能問題。 ZendFramework:企業級,穩定可靠,但笨重,許可昂貴。 Slim:微框架,速度快,但功能有限,學習曲線陡峭。

C++ Lambda 表達式如何實作閉包? C++ Lambda 表達式如何實作閉包? Jun 01, 2024 pm 05:50 PM

C++Lambda表達式支援閉包,即保存函數作用域變數並供函數存取。語法為[capture-list](parameters)->return-type{function-body}。 capture-list定義要捕獲的變量,可以使用[=]按值捕獲所有局部變量,[&]按引用捕獲所有局部變量,或[variable1,variable2,...]捕獲特定變量。 Lambda表達式只能存取捕獲的變量,但無法修改原始值。

See all articles