闭包的理解和实例

参考阮一峰大神
http://www.ruanyifeng.com/blog/2009/08/learning_javascript_closures.html

闭包:闭包就是能够读取其他函数内部变量的函数。(由于在Javascript语言中,只有函数内部的子函数才能读取局部变量,因此可以把闭包简单理解成”定义在一个函数内部的函数“)

作用:一个是前面提到的可以读取函数内部的变量,另一个就是让这些变量的值始终保持在内存中(也是它的缺点)。

实例一:使用闭包代替全局变量

function a(){
    var i=11111;
    b = function(){
        return i;   
    }       
    return b;   
}   
var c = a();   
console.log(c()); // 11111 

实例二 :为节点循环绑定click事件,在事件函数中使用当次循环的值或节点,而不是最后一次循环的值或节点

for(var i=0;i<5;i++) {
    (function(n){
        setTimeout(()=> {
            console.log(n);
        },0);
    })(i);
}
// 0 1 2 3 4

实例三:在小范围使用全局变量,这个时候就可以使用闭包来代替。

(function(){
    var test2=222;
    function outer(){
        alert(test2);
    }
    outer(); //222
})(); 

alert(test2); //报错,test2 is not defined

你可能感兴趣的:(js)