1.閉包的含義
閉包是指有權訪問另一個函數作用域中的變量的函數。創建閉包的常見方式,就是一個函數內部創建另一個函數
2.閉包用途
1).讀取函數內部的變量
function f1(){
var n=999;
function f2(){ //閉包
return n;
}
return f2;
}
var result=f1();
console.log(result()); // 999
2).讓變量的值始終保持在內存中
第一次result結束,內部變量n沒有被釋放,而是是被閉包持有
function f1(){
var n=999;
nAdd=function(){n+=1} //函數內部屬性不用var修飾會變全局變量
function f2(){
console.log(n);
}
return f2;
}
var result=f1();
result(); // 999
nAdd();
result(); //1000
<script>
var nodes = document.getElementsByTagName('div');
for(var i = 0, len = nodes.length; i < len; i++){
//會發現每次點擊div,彈出的不是實際的i,而是len
//因為onClick是異步觸發的,當事件觸發,for循環早已介紹了
nodes[i].onClick = function(){
console.log(i);
}
}
for(var i = 0, len = nodes.length; i < len; i++){
//使用閉包,作用域鏈會先從閉包里面查找i變量,閉包的屬性會持久留在內存中
(function(i){//接收i
nodes[i].onClick = function(){
console.log(i);
}
})(i);//傳入i
}
</script>