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>  
//歡迎加入全棧開發交流群一起學習交流: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() ;
閉包就是將函式內部和函式外部連線起來的一座橋樑。