javascript中閉包是什麼

前端攻城小牛啊發表於2018-10-29

javascript中閉包是什麼

javascript中閉包是什麼

JavaScript 變數可以是區域性變數或全域性變數。私有變數可以用到閉包。閉包就是將函式內部和函式外部連線起來的一座橋樑。

函式的閉包使用場景:比如我們想要一個函式來執行計數功能。

如果設計全域性變數

var counter=0; 2 function add(){ 3 4 return counter++;} 
// add();
複製程式碼

在瀏覽器呼叫 add();//值為2

問題是如何當我們設計另外一個方法時用到需要counter這個變數,我們在進行修改無疑會改變counter的初始值如下

<script> var counter=0; function add(){ return counter++;} function plus(){
 return counter=5;
 }
 
 plus();
</script> &emsp;
//歡迎加入全棧開發交流群一起學習交流:864305860
複製程式碼

我們此時在呼叫add() 值就是6 所以設定counter變數為全域性變數的時候我們呼叫函式會得到不想要的值;

function add(){
var counter=0;
return counter++ ;
}呼叫add()結果永遠是0,函式執行到 counter=0;就覆蓋變數;
複製程式碼

所以我們需要函式外部可以讀取函式變數內部的值,下面就對函式進行了私有化 在 JavaScript 中,所有函式都能訪問它們上一層的作用域

JavaScript 支援巢狀函式。巢狀函式可以訪問上一層的函式變數。

該例項中,內嵌函式 plus() 可以訪問父函式的 counter 變數

 function add() {
 var counter=0 ;
 function plus (){
 counter++;
 }
 plus();
 return counter;
 }
複製程式碼

閉包的寫法

函式的立即執行()() 及函式的宣告和函式的執行放在一起

這就是閉包的最終格式

var plus=(function add() {
 var counter=0;//定義為區域性變數
 return function(){
 counter++;//
 console.log("counter"+counter);
 }
 })()
複製程式碼

呼叫plus() ;

閉包就是將函式內部和函式外部連線起來的一座橋樑。

全棧開發交流群:864305860.png

相關文章