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>