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

2021-08-21 22:37:23 字數 745 閱讀 8848

1、什麼是作用域鏈?

在理解閉包以前.最好能先理解一下作用域鏈的含義,簡單來說,

作用域鏈

就是函式在定義的時候建立的,用於尋找使用到的變數的值的乙個索引,而他內部的規則是,把函式自身的本地變數放在最前面,把自身的父級函式中的變數放在其次,把再高一級函式中的變數放在更後面,以此類推直至全域性物件為止.當函式中需要查詢乙個變數的值的時候,js直譯器會去作用域鏈去查詢,從最前面的本地變數中先找,如果沒有找到對應的變數,則到下一級的鏈上找,一旦找到了變數,則不再繼續.如果找到最後也沒找到需要的變數,則直譯器返回undefined.

2、js的記憶體**機制

了解了作用域鏈,我們再來看看

js的記憶體**機制

,一般來說,乙個函式在執行開始的時候,會給其中定義的變數劃分記憶體空間儲存,以備後面的語句所用,等到函式執行完畢返回了,這些變數就被認為是無用的了.對應的記憶體空間也就被**了.下次再執行此函式的時候,所有的變數又回到最初的狀態,重新賦值使用.但是如果這個函式內部又巢狀了另乙個函式,而這個函式是有可能在外部被呼叫到的.並且這個內部函式又使用了外部函式的某些變數的話.這種記憶體**機制就會出現問題.如果在外部函式返回後,又直接呼叫了內部函式,那麼內部函式就無法讀取到他所需要的外部函式中變數的值了.所以js直譯器在遇到函式定義的時候,會自動把函式和他可能使用的變數(包括本地變數和父級和祖先級函式的變數(自由變數))一起儲存起來.也就是構建乙個閉包,這些變數將不會被記憶體**器所**,只有當內部的函式不可能被調

什麼是閉包?為什麼使用閉包?閉包的缺點?

閉包 即重用乙個變數,又保護變數不被汙染的一種機制。為什麼使用閉包 全域性變數和區域性變數都具有不可兼得的優缺點。全域性變數 優 可重用,缺 易被汙染。區域性變數 優 僅函式內可用,不會被汙染。缺 不可重用 何時使用 只要即重用乙個變數,又保護變數不被汙染時。如何 3步 1.用外層函式包裹要保護的變...

閉包的作用及優缺點

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

什麼是閉包

什麼是閉包 閉包說的通俗一點就是打通了一條在函式內部訪問函式內部作用域的通道。正常情況下,函式外部是訪問不了內部作用域變數的,表象判斷是不是閉包 函式巢狀函式,內部函式被return 內部函式呼叫外層函式的區域性變數。優點 可以隔離作用域,不造成全域性渲染。缺點 由於閉包長期駐留記憶體,則長期這樣會...