简单理解Closures - javascript

方程1执行完后在执行盏中pop出来, 然而它们的变量都还在,如果这个pop出去的方程1返回的也是个方程2,而且这个方程2里面需要方程1的变量,那么这个方程2依然能访问这些变量。 这就是Closures。
如下代码:

function buildFunctions() {
 
    var arr = [];
    
    for (var i = 0; i < 3; i++) {
        
        arr.push(
            function() {
                console.log(i);   
            }
        )
        
    }
    
    return arr;
}

var fs = buildFunctions();

fs[0]();
fs[1]();
fs[2]();

function buildFunctions2() {
 
    var arr = [];
    
    for (var i = 0; i < 3; i++) {
        arr.push(
            (function(j) {
                return function() {
                    console.log(j);   
                }
            }(i))
        )
        
    }
    
    return arr;
}

var fs2 = buildFunctions2();

fs2[0]();
fs2[1]();
fs2[2]();

function buildFunctions3() {
 
    var arr = [];
    
    for (var i = 0; i < 3; i++) {
        let j = i;
        arr.push(
            function(){
                console.log(j);
            }
        );
        
    }
    
    return arr;
} 

var fs3 = buildFunctions3();

fs3[0]();
fs3[1]();
fs3[2]();

上图解释:

image.png
image.png

Reference:
https://www.udemy.com/understand-javascript/learn/v4/t/lecture/2237546?start=0

你可能感兴趣的:(简单理解Closures - javascript)