js 閉包的簡單理解

來源:互聯網
上載者:User

標籤:

  let a = function(){
var i=0;
let b
= function(){ i++; alert(i); }
return b; } let c = a(); c();

這段代碼有兩個特點:

1、函數b嵌套在函數a內部;

2、函數a返回函數b。 
  這樣在執行完var c=a()後,變數c實際上是指向了函數b

當函數a的內建函式b被函數a外的一個變數引用的時候,就建立了一個閉包。

閉包有什麼作用?
閉包使得Javascript的記憶體回收機制GC不會收回a所佔用的資源,
因為a的內建函式b的執行需要依賴a中的變數
如果a返回的不是函數b,函數a和b互相引用但又不被外界打擾(被外界引用),函數a和b就會被GC回收

1、防止全域變數汙染。函數a中i只有函數b才能訪問,而無法通過其他途徑訪問到,因此保護了i的安全性。

2、在記憶體中維持一個變數。由於閉包,函數a中i的一直存在於記憶體中,因此每次執行c(),都會給i自加1。

Javascript的記憶體回收機制

在Javascript中,如果一個對象不再被引用,那麼這個對象就會被GC回收。

如果兩個對象互相引用,而不再被第3者所引用,那麼這兩個互相引用的對象也會被回收。

因為函數a被b引用,b又被a外的c引用,這就是為什麼函數a執行後不會被回收的原因。
 

js 閉包的簡單理解

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.