閉包: 有權訪問另一個函數作用域中變數的函數 用處: 1 讀取函數內部的變數 2 讓某些變數的值始終保持在記憶體中 在瞭解閉包之前,我們需要明白變數的作用域,即函數內部能夠讀取全局變數,但是函數外卻不能讀取函數內的局部變數 1 當使用閉包訪問局部變數 此時f2就是閉包 2 累加 2.1 使用全局變數累 ...
閉包: 有權訪問另一個函數作用域中變數的函數
用處: 1 讀取函數內部的變數
2 讓某些變數的值始終保持在記憶體中
在瞭解閉包之前,我們需要明白變數的作用域,即函數內部能夠讀取全局變數,但是函數外卻不能讀取函數內的局部變數
1 當使用閉包訪問局部變數
function f1(){ var n = 999; function f2(){ alert(n); } return f2; } var result = f1(); result(); // 999
此時f2就是閉包
2 累加
2.1 使用全局變數累加
var num = 1; function add(){ num++; } alert(num); //1 add(); alert(num); //2 add(); alert(num); //3
可以達到想要的效果,但是因此帶來的是全局污染
2.2 使用局部變數累加
function add(){ var num =1; num++; return num; } alert(add()); //2 alert(add()); //2
輸出的結果每次都是2是因為每次執行add函數時,num又被初始化了
2.3 使用閉包累加
function add(){ var num = 1; return function(){ num++; return num; } } var b= add(); alert(b()); //2 alert(b()); //3
在沒有使用全局變數的情況下,也能實現累加,這裡值得註意的點是:最後是把add()賦值給變數b;而不是直接alert(add()());這裡是可以防止num再一次初始化;