JavaScript閉包學習筆記

來源:互聯網
上載者:User

標籤:

1.什麼是閉包,閉包如何工作

2.閉包的優點

3.怎樣使用閉包

4.總結閉包

1.什麼是閉包?

閉包是指有權訪問另一個函數範圍中的變數的函數。

 我們在範圍那篇隨筆中講過,函數執行完畢局部使用中的物件被銷毀。但是,在閉包中,外部函數執行完畢後,其使用中的物件也不會被銷毀,因為匿名函數的範圍鏈仍然在引用這個使用中的物件,而執行環境的範圍鏈會被銷毀。這是理解閉包非常非常重要的一點哦~~

2.閉包的優點

之前在講範圍時我們說過由上至下,由內而外。所以在全域是無法訪問函數內部的變數的

但是使用閉包我們就可以訪問到函數內變數a啦

1 function fn1() {2     var a = "奧特曼";3     return function () {4         return a;5     }();6 }7 console.log(fn1());

duang!duang!duang!

現在呢閉包的優點很明顯啦~~

就是有權訪問另一個函數範圍中的變數啦。

3.怎樣使用閉包

常見的兩種使用閉包的情況:

  • 函數作為傳回值
  • 函數作為參數傳遞
  • 模仿塊級範圍

 我們上面的fn1去掉改一下就是典型的一個函數作為傳回值的閉包

function fn1() {    var a = "奧特曼";    return function () {        return a;    };}console.log(fn1()());

模仿塊級範圍(1)建立並立即調用函數,這樣既可以執行其中的代碼,又不會在記憶體中留下對該函數的引用。

(2)結果就是函數內部的所有變數都會被立即銷毀——除非將某些變數賦值給了包含範圍中的變數。

4.總結

閉包的原理

  • 在後台執行環境中,閉包的範圍鏈會包含著它自己的範圍,包含函數的範圍和全域範圍。
  • 通常,函數的範圍及其所有變數都會在函數執行結束後會被銷毀。
  • 但是,當函數返回了一個閉包時,這個函數的範圍將會一直在記憶體中儲存到閉包不存在為止。

 

未完待續

 

JavaScript閉包學習筆記

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.