1 | function a(){ |
这样在执行完var c=a()后,变量c实际上是指向了函数b,再执行c()后就会弹出一个窗口显示i的值(第一次为1)。这段代码其实就创建了一个闭包,为什么?因为函数a外的变量c引用了函数a内的函数b,就是说:
当函数a的内部函数b被函数a外的一个变量引用的时候,就创建了一个闭包。
- 闭包的作用
在a执行完后并返回,闭包使得JavaScript的垃圾回收机制GC不会收回a所占的资源,因为a的内部函数b的执行需要依赖a中的变量
下面是一个经典的闭包利用1
2
3
4
5
6
7
8
9
10
11
12
13for(var j=0;j<5;j++){
(function(j){
setTimeout(function(){
console.log(j);
},1000);
})(j)
}
console.log(`--------------`);
for(var i=0;i<=5;i++){
((i)=>{setTimeout(()=>
console.log(i),1000);
})(i);
}