javascript之閉包基礎瞭解#學浪計劃#

閉包是JavaScript必須瞭解的一個知識點。

什麼是閉包?

閉包就是值有權訪問另一個函數作用域中的變量的函數,常見的方式就是:在一個函數內部創建另一個函數,並把這個函數作為返回值。

代碼部分:

<code>

function

adolescent

(

ages

) {

var

age=

24

;

return

function

(

additional

) {

return

age+ages+additional; } }

var

adult = adolescent(

1

);

var

result = adult(

2

);/<code>

首先創建了一個函數adolescent,然後返回了一個匿名函數,匿名函數中則使用了局部變量age和ages,由於js的作用域鏈的關係,所以是可以訪問父級函數的變量。

然後在匿名函數中使用了父級作用域的變量,在返回這個函數。

然後我們執行adolescent函數,獲取到返回的匿名函數,在這裡的作用域是全局作用域,然後卻用到了局部的變量,這就是閉包。

最後用了變量adult接受這個匿名函數,然後執行。

閉包在我們開發就會不知覺用到,也許你自己都還不知道。

注意點:

過度使用閉包會佔用更多內存。

一般情況下,在函數執行完畢後,其中的局部變量都會自動銷燬,內存中僅保存著全局作用域的變量對象。

但是在另一個函數內部定義的函數(也就是閉包)會包含父級函數的作用域的變量對象。

就拿上面的代碼說:返回的是一個匿名函數,這個函數就包含了adolescent函數的作用域對象,所以當adolescent執行完後,他的作用域上的變量仍然存在內存中。

由於上述使用了adult變量來接受這個函數,而這個變量在全局變量中,所以內存不會釋放,所以我們只有手動釋放內存,即在最後把adult的引用設置為null就可以釋放內存。

<code>

adult

=null/<code>


閉包是依靠了js的作用域鏈的特性而來的。

閉包的應用的地方還是非常多的,需要大家靈活應用,最重要的是要考慮到釋放內存


分享到:


相關文章: