當前位置:
首頁 > 最新 > 三分鐘帶你了解什麼是閉包

三分鐘帶你了解什麼是閉包

閉包作為javascript中一個難點會經常出現在前端學習者的視野中,樓主當初也看了很多關於講解閉包的文章,很多都是看完了更懵了,其實閉包理解了就很簡單,今天就簡單來介紹一下閉包,相信看完後大家都會清楚地知道什麼是閉包。

概念:

在理解閉包之前,我們要首先理解javascript 特殊的變數作用域。

變數的作用域分位兩種,全局變數和局部變數。而javascript有別於其他語言的地方在於,函數內部可以讀取全局變數。但是在函數外部無法讀取函數內部的局部變數。

然而有些時候,出於某些原因我們會需要獲取函數內部的局部變數,由於前面提到的作用域的限制,外部無法獲取內部的作用域,而內部可以獲取外部的作用域。因此我們可以通過在函數內部定義一個新的函數的方法來達到目的。

function f1(){

var hi = "hello, world!";

function f2(){

alert(hi); // hello, world!

}

}

在上面的代碼中,函數f2被包括在函數f1內部,這時f1內部所有的局部變數對f2都是可見的。因此,只要把f2作為返回值,就可以在外部獲取到f1內部的變數了。

上面代碼中的f2函數,就是閉包。

總結:

閉包是能夠讀取其他函數內部變數的函數。由於在javascript語言中,只有函數內部的子函數才能讀取局部變數,因此可以把閉包簡單理解成「定義在一個函數內部的函數」。

作用:

閉包的作用主要體現在兩點:

1、讀取函數內部的變數;

2、讓這些變數的值始終保持在內存中,不會在f1被調用後自動清除。

注意點:

1、由於閉包會使得函數中的變數都被保存在內存中,內存消耗過大,所以不能濫用閉包。否則會造成網頁的性能問題,在IE中可能會導致內存泄漏。解決辦法是,在退出函數之前,將不使用的局部變數全部刪除。

2、閉包會在父函數外部,改變父函數內部變數的值。所以,如果你把父函數當作對象(object)使用,把閉包當作它的公用方法(public method),把內部變數當作它的私有屬性(private value),這時一定要小心,不要隨便改變父函數內部變數的值。

文|孫志遠

編輯|蘇丹

圖片|來自網路


點擊展開全文

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 E紀 的精彩文章:

TAG:E紀 |