javascript閉包概念介紹
閉包是javascript中一個比較重要的概念,如果說javascript有很多的入門標準的話,那麼閉包就算做是其中的一個。
下面就介紹一下javascript閉包的相關概念,需要的朋友可以做一下參考。
在閱讀本文之前,最好參閱以下幾篇文章,如果已經掌握可以略過。
(1).javascript執行上下文詳解一章節。
(2).javascript變數物件詳解一章節。
(3).javascript 作用域和作用域鏈詳解一章節。
在javascript中,函式function是一個物件,它既可以作為一個函式的引數,也可以作為一個函式的返回值。
上面的這個特點,在閉包中就會經常的被用到,下面先給出閉包的概念:
[JavaScript] 純文字檢視 複製程式碼閉包就是能訪問另一個函式作用域中變數的函式。
看如下程式碼例項:
[JavaScript] 純文字檢視 複製程式碼function func() { var webName = "螞蟻部落"; function funA() { console.log(webName); } return funA; } var foo = func(); foo();
上面的程式碼就形成了一個閉包,函式funA被當做返回值返回,並賦值給變數foo。
當呼叫此返回函式的時候,依然可以輸出func函式中宣告的變數webName。
按照通常的道理,當一個函式執行完畢以後,它就會被銷燬,那麼它的變數就無法再訪問了。
之所以能夠進行訪問,就是因為作用域鏈的原因導致的。
在進入上下文階段,函式宣告會儲存在變數/活躍物件中(VO/AO),每一個函式都會有一個[[Scope]]指標,它指向是一個包含了所有上層變數物件的堆疊,[[Scope]]是在函式建立的時候儲存起來的,並且以後永不會改變,直到被銷燬。那麼就以上面為例,雖然func() 執行完畢以後,它的內部的變數和作用域鏈被銷燬,但是函式funcA由於被全域性變數foo所引用,所以它不會被效果,它的作用域鏈也就不會被銷燬,那麼所指向的變數物件就依然存在,於是webName就是可訪問的。
相關文章
- javascript中的閉包概念簡單介紹JavaScript
- 簡單介紹JavaScript閉包JavaScript
- javascript遞迴概念簡單介紹JavaScript遞迴
- JavaScript閉包JavaScript
- JavaScript 閉包JavaScript
- JavaScript - 閉包JavaScript
- 【閉包概念】關於閉包概念不同解讀——你可以自己理解。
- [JavaScript閉包]Javascript閉包的判別,作用和示例JavaScript
- JS閉包函式概念JS函式
- js清除閉包的通常方式簡單介紹JS
- 閉包 | 淺談JavaScript閉包問題JavaScript
- Spark概念介紹Spark
- JavaEE概念介紹Java
- 理解JavaScript 閉包JavaScript
- JavaScript 清除閉包JavaScript
- JavaScript 的閉包JavaScript
- JavaScript-閉包JavaScript
- JavaScript之閉包JavaScript
- 解密JavaScript閉包解密JavaScript
- Javascript 閉包(Closures)JavaScript
- 理解 JavaScript 閉包JavaScript
- Javascript閉包(Closure)JavaScript
- Redux 包教包會(一):介紹 Redux 三大核心概念Redux
- javascript物件導向程式設計概念簡單介紹JavaScript物件程式設計
- Oracle RAC 概念介紹Oracle
- JavaScript 閉包基本指南JavaScript
- JavaScript 閉包那些事JavaScript
- 理解Javascript的閉包JavaScript
- JavaScript閉包詳解JavaScript
- 詳解 JavaScript 閉包JavaScript
- JavaScript:閉包學習JavaScript
- Javascript 閉包小結JavaScript
- JavaScript深入之閉包JavaScript
- JavaScript 深入之閉包JavaScript
- 學習Javascript閉包JavaScript
- javascript 閉包詳解JavaScript
- javascript閉包—圍觀大神如何解釋閉包JavaScript
- 深入理解javascript原型和閉包(15)——閉包JavaScript原型