JavaScript闭包无处不在

闭包是函数的特性

每个函数都可以记住并访问所在的作用域,当函数在当前作用域之外调用时,就会产生闭包。
可以简单的认为,一个函数的作用域链就是一个闭包。

var foo = (function bar(i) {
    function inner() {
        console.log(i);
    }
    return inner;
})(10);
foo();

由于inner函数记住了bar函数作用域及自己内部的作用域。所以执行inner(也就是foo),就会产生闭包。

利用闭包劫持变量

for(var i = 0; i < 5; i++) {
    (function(i){
        setTimeout(function timer() {
            console.log(i);
        }, i * 500);
    }(i));
}

执行上面代码,每次循环timer函数都会记住不同的环境(IIFE函数作用域),也就产生了不同的闭包,每个闭包中都劫持了一份i值得副本,分别为0~4。

你可能感兴趣的:(JavaScript闭包无处不在)