閉包的理解

概念:當一個函數的返回值是另外一個函數,而返回值的那個函數若是調用了其父函數內部的變量,且返回的這個函數在外部被執行就產生了閉包。閉包

閉包是一個環境,具體指的就是外部函數--高階函數。函數

說的通俗一點就是一個環境,可以讀取其餘函數內部的變量。spa

本質上,閉包是將函數內部和函數外部鏈接起來的橋樑。對象

用處:1·讀取內部函數的變量;
內存

    2·這些變量的值始終會保持在內存中,不會在外層函數調用後被自動清除變量

優勢:1·變量會一直在內存中;垃圾回收

      2·避免全局變量的污染;引用

      3·私有變量的存在;內存泄露

特性:1·函數嵌套函數;co

      2·內部函數能夠直接使用外部函數的局部變量;

      3·變量或參數不會被垃圾回收機制回收 GC;

補充一下垃圾回收機制:

  在Js中,若是一個對象再也不被引用,那麼這個對象就會被GC回收。若是兩個對象互相引用,而再也不被第3者所引用,那麼這兩個互相引用的對象也會被回收。由於函數a被b引用,b又被a外的c引用,這就是爲何函數a執行後不會被回收的緣由。

缺點:變量長期儲存在內存中,會增大內存的使用量 使用不當會形成內存泄露

判斷閉包的3個特色:

  1·函數嵌套函數;

  2·內部函數必定操做了外部函數的局部變量;

  3·外部函數必定將內部函數返回到外部並保存在一個全局變量中;

判斷閉包的執行結果:

  1·外部函數被調用了幾回就有幾個受保護的局部變量的副本;

  2·來自一個閉包的函數被調用幾回,受保護的局部變量就變化幾回;

相關文章
相關標籤/搜索