美文网首页
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闭包大结局(JS闭包系列3)

    在上一篇中再谈JS闭包(JS闭包系列2),我详细的介绍了JS中的变量作用域相关的概念,结合第一节关于JS闭包(JS...

  • 彻底理解JS闭包

    闭包并不是JS所独有的,在计算机科学中其是一个普遍的概念,在Python中也有闭包的概念,但闭包在Python应用...

  • JS中闭包的概念

    1. 闭包概念 bar() 依然拥有对那个作用域的引用,而这个引用称为闭包 无论我们使用什么方法将内部函数 传送 ...

  • Lambda表达式和闭包Closure

    简介 我们通常讲到闭包,一般都是指在javascript的环境中。闭包是JS中一个非常重要的也非常常用的概念。闭包...

  • python 中的闭包

    闭包这个概念在很多语言中都有,比如 Java, JS,之前的文章中也提到过这个闭包,但是感觉这个概念还是有一点模糊...

  • Javascript 学习(闭包)

    js闭包 js中的闭包问题是由函数变量的作用域引出的,全局变量和局部变量的概念和Java感觉没有太大的区别,但是如...

  • 闭包与立即执行函数

    在学习js的过程中,我们都会遇到闭包和立即执行函数的相关概念,今天就这两个概念做一个大致的整理。 本文结构: 闭包...

  • 闭包

    关键词:闭包(closure) 概念:闭包就是能够读取其他函数内部变量的函数,对于js,闭包就是将函数内部和函数外...

  • JS闭包

    关于闭包 在JS中闭包是一个比较重要的概念.个人理解就是函数中嵌套函数,内部函数可以访问外部函数的变量,也可以在内...

  • 简单的聊一下闭包

    js中的闭包 闭包是学习js中永远也绕不过去的一个坎,那么,今天我们就去一段简单的代码开始聊一聊闭包 什么是闭包 ...

网友评论

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

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