闭包:简单的说就是一个函数内嵌套另外一个函数。
简单的闭包实例:
第一:function a(){
var c=1
var b=function(){
c=3
console.log(c)//打印的值3
}()
console.log(c)//打印的值3
}
a()
第二:function a(){
var c=1
var b=function(){
var c=3
console.log(c)//打印的值3
}()
console.log(c)//打印的值1
}
a()
上面两种状况打印的值则是不同的
为何要使用闭包呢:
问到此处的时候,咱们想到的就是做用域的问题了,做用域分为全局做用于和局部做用域,咱们通常能够从内部访问到外部的变量,但不能从外部访问内部的变量,这时候咱们就能够用闭包,闭包就是间接的帮咱们访问函数内部的变量
简单的闭包实例:
function a(){
var b=1
function c(){
console.log(++b)
}
return c
}
var d=a()
d()//2
------------------------------适用场景-------------------------------
for循环中套用延时器
for(var i = 0; i < 5; i++) {
setTimeout(function () {
console.log(i);
});
}
console.log('a');
打印的顺序是:先是a,而后就是五个5
(解决打印5不打印0,1,2,3,4,5的方案:在for循环中套用匿名函数)
第一种方案:(使用闭包解决)
for(var i = 0; i < 5; i++) {
(function(i) {
setTimeout(function () {
console.log(i);
});
})(i)
}
console.log('a');
此时打印的顺序是:先是a,而后0,1,2,3,4,5
第二种方案:(将var改用Es6的let)
for(let i = 0; i < 5; i++) {
setTimeout(function () {
console.log(i);
});
}
console.log('a');
此时打印的顺序是:先是a,而后0,1,2,3,4,5 复制代码