談談我對閉包知識的深入理解

在javascript中閉包應該是最難理解的一部份內容。在我看來閉包就是和做用域之間的聯繫。

一、首先咱們來了解一下javascript中的做用域知識。

javascript中的做用域其實就指的函數做用域,由於只有函數在javascript中才能造成區域範圍。而函數做用域有一下特色。javascript

1.1 函數能訪問到外部的變量。案例一:java

var num = 123; function fn() { console.log(num);//輸出的值爲123 } fn();

1.2 函數內的變量不能被外部訪問到。案例二:web

function fn(){ var num=123; } console.log(num)//輸出值:num is not undefined說明函數內部的變量是不能被外邊訪問的。

二、下面就該說閉包了

從上面案例二我能夠知道函數會造成一個封閉的區域,對其中的變量起到保護做用,使函數外邊沒法訪問。閉包

閉包:從字面意思來理解就是封閉和包裹,換句話說,就是在函數內部定義的變量,在函數的外部沒法訪問到,所以就說函數構成了一個閉包。函數

說白了閉包是做用域的應用。spa

計算機科學中對閉包的定義爲:一個函數的函數體以及函數所處的環境,構成的一個綜合體叫作:閉包code

函數體:就是函數內部的代碼。ip

函數所處的環境:指的就是做用域。作用域

是否是以爲計算機科學中對閉包的定義是否是很難理解。it

三、使用閉包來解決什麼樣的問題?

我使用閉包來解決如何訪問函數內部變量的問題。 下面我寫個史上最簡單的閉包。

function foo() { var num = 123; function fn() { return num;// } return fn; } var m=foo(); var f=m(); console.log(f);//輸出的值爲123,這樣就能夠訪問到函數內部變量num。 原理就是利用閉包:在函數foo中嵌套了一個函數fn,利用函數fn能夠訪問到其外部的變量,而獲取函數foo中的變量num,當外部調用函數foo()時候, 函數foo中 return返回fn函數的實體,而後我再對函數fn進行調用就在外部訪問到函數內部變量num了。就是利用內部函數的閉包特性把函數foo中的變量取到外邊, 說白了內部函數就至關於一個媒介,就是一個橋樑鏈接函數內部和外部。這就是閉包做用。
相關文章
相關標籤/搜索