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


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

1、首先我們來了解一下javascript中的作用域知識。

javascript中的作用域其實就指的函數作用域,因為只有函數在javascript中才能形成區域范圍。而函數作用域有一下特點。

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

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

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

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

2、下面就該說閉包了

從上面案例二我可以知道函數會形成一個封閉的區域,對其中的變量起到保護作用,使函數外邊無法訪問。

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

說白了閉包是作用域的應用。

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

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

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

是不是覺得計算機科學中對閉包的定義是不是很難理解。

3、使用閉包來解決什么樣的問題?

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

 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中的變量取到外邊, 說白了內部函數就相當於一個媒介,就是一個橋梁連接函數內部和外部。這就是閉包作用。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM