什么是闭包,为何使用闭包

闭包:简单的说就是一个函数内嵌套另外一个函数。
 简单的闭包实例:
第一: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 复制代码
相关文章
相关标签/搜索