美文网首页
JS中闭包的概念

JS中闭包的概念

作者: 正义国王 | 来源:发表于2020-02-05 09:27 被阅读0次

    1. 闭包概念

    function foo() {
        var a = 2; //let a = 2;
    
        function bar() {
            console.log( a );
        }
    
        return bar;
    }
    
    var baz = foo();
    
    baz(); // 2 -- 哇噢,看到闭包了,伙计。
    

    bar() 依然拥有对那个作用域的引用,而这个引用称为闭包

    无论我们使用什么方法将内部函数 传送 到它的词法作用域之外,它都将维护一个指向它最开始被声明时的作用域的引用,而且无论我们什么时候执行它,这个闭包就会被行使

    2. 一个很好的例子

    不使用闭包

    for (var i=1; i<=5; i++) {
        setTimeout( function timer(){
             console.log( i );
        }, i*1000 );
    }
    //6,6,6,6,6
    

    使用闭包

    for (var i=1; i<=5; i++) {
        (function(){
            var j = i;
            setTimeout( function timer(){
                console.log( j );
            }, j*1000 );
        })();
    }
    //1,2,3,4,5
    

    3. 重温块儿作用域

    for (var i=1; i<=5; i++) {
        let j = i; // 呀,给闭包的块儿作用域!
        setTimeout( function timer(){
            console.log( j );
        }, j*1000 );
    }
    //1,2,3,4,5
    
    for (let i=1; i<=5; i++) {
        setTimeout( function timer(){
            console.log( i );
        }, i*1000 );
    }
    //1,2,3,4,5
    

    以上参考《你不知道的JS》,代码结果已经经过验证。

    总结:从以上示例来看:

    • 函数内可形成一个封闭的作用域,外部不可访问;同时形成闭包,无论函数在何处被调用,它都将维护一个指向它最开始被声明时的作用域的引用
    • let 关键字将变量声明附着在它所在的任何块儿(通常是一个 { .. })的作用域中,这个块作用域外部不可访问。

    相关文章

      网友评论

          本文标题:JS中闭包的概念

          本文链接:https://www.haomeiwen.com/subject/pmujxhtx.html