閉包的使用方式及其優缺點

2021-10-03 03:53:43 字數 959 閱讀 4616

閉包是指可以包含自由(未繫結到特定物件)變數的**塊;這些變數不是在這個**塊內或者任何全域性上下文中定義的,而是在定義**塊的環境中定義(區域性變數)。

一.閉包的定義和呼叫階段

定義:開闢乙個函式空間,把**存放在函式的儲存空間內,把空間位址複製給函式名

呼叫:1.按照函式名儲存的位址找到儲存空間;

2.再次開闢乙個函式執行空間;

3.在執行空間內部進行引數賦值;

4.在執行空間進行預解析;

5.把儲存空間的**複製乙份到執行空間執行;

6.**執行完畢以後,執行空間銷毀

二.乙個不會銷毀的函式空間(閉包空間)

當函式裡面返回乙個複雜函式資料型別,並且在函式外部有變數引入這個被返回的複雜資料型別的時候,這個函式執行空間不會被銷毀就這樣形成了閉包空間。

三.閉包的條件

1.函式a內部直接或間接返回乙個函式b;

2.函式b內部使用著函式a的私有資料;

3.函式a外部有變數引用著函式b

舉個小例子:

四.閉包的優缺點

1.延長變數的宣告週期

=>優點:變數會一直存在

=>缺點:乙個不會銷毀的函式執行空間

2.可以在函式外部使用著函式a的私有變數

=>優點:函式外部訪問內部資料

=>缺點:有乙個不會銷毀的函式執行空間

3.保護私有變數

=>優點:內部變數不能在外部訪問

=>缺點:閉包空間記憶體溢位

總結: 閉包說白了就是乙個環境,能夠讀取其他函式內部的變數。

本質上,閉包是將函式內部和函式外部連線起來的橋梁。雖然缺點也有,但是利大於弊。

JS閉包的理解及其優缺點

初級理解 js高程 小紅書 閉包是指有權訪問另乙個函式作用域中變數的函式。其認為閉包是乙個函式 中級理解 you don t know js 小黃書 閉包是導致函式呼叫棧不能正常銷毀的一種持續引用 這種引用一般體現於某個函式體內其他函式的宣告 高階理解 形成閉包的真正原因是 作用域未能正常釋放,變數...

什麼是閉包及閉包的優缺點

1 什麼是作用域鏈?在理解閉包以前.最好能先理解一下作用域鏈的含義,簡單來說,作用域鏈 就是函式在定義的時候建立的,用於尋找使用到的變數的值的乙個索引,而他內部的規則是,把函式自身的本地變數放在最前面,把自身的父級函式中的變數放在其次,把再高一級函式中的變數放在更後面,以此類推直至全域性物件為止.當...

閉包的作用及優缺點

下面我們就簡單的了解一下閉包這個東西到底是什麼 首先,我們先來講講什麼是閉包 簡單來說就是乙個定義在函式內部的函式,可以讀取到其他函式內部變數的函式,本質上,閉包就是乙個把函式內部和外部連線起來的橋梁 那我們讀取函式內部的變數為什麼要用到閉包呢,或者說閉包的作用是什麼?這就涉及到變數的生命週期問題了...