关于闭包的理解

本文详细探讨了JavaScript中的作用域概念,包括全局、局部和块级作用域,并通过示例解释了变量的使用范围。此外,还讨论了闭包的特性,即函数内部能够访问外部变量的能力,以及在异步操作中如何保持变量状态。同时,文章通过实例展示了作用域链的工作原理,强调了变量查找的就近原则。最后,通过函数嵌套和返回内部函数的方式,进一步阐述了闭包的实际应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

// 闭包就是函数套函数
        // 学习闭包就必须学习作用域这个概念

        /**
         * 作用域:变量可以使用的作用范围
         * 
         * 全局的  局部的  块级的
         * 
         * */
        // 全局的
        //  var a = 1
        //  function fn1(){
        //      console.log(a);
        //  }
        // //  console.log(a); 
        // fn1()

        // 局部的

        // function fn1(){
        //     var a = 10
        //     console.log(a)
        // }
        // fn1()
        // console.log(a)


        // 块级的

        // {
        //     let a = 100
        //     console.log(a)
        // }
        // console.log(a);


        // for(var i=0;i<6;i++){
        //     // console.log(i)
        //     /**
        //      * i == 0 --------> 延时器
        //      * i == 1 --------> 延时器
        //      * i== 2 --------> 延时器
        //      * i== 3 --------> 延时器
        //      * i == 4 --------> 延时器
        //      * i == 5 --------> 延时器
        //      * i==6
        //      * 
        //      * 该执行异步的了: 6个延时器
        //      * 
        //      * */
        //     setTimeout(()=>{
        //         console.log(i)
        //     })
        // }

        // for(let i=0;i<6;i++){
        //     // console.log(i)
        //     /**
        //      * i == 0 --------> 延时器  i = 0
        //      * i == 1 --------> 延时器
        //      * i== 2 --------> 延时器
        //      * i== 3 --------> 延时器
        //      * i == 4 --------> 延时器
        //      * i == 5 --------> 延时器
        //      * i==6
        //      * 
        //      * 该执行异步的了: 6个延时器
        //      * 
        //      * */
        //     setTimeout(()=>{
        //         console.log(i)
        //     })
        // }


        // 作用域链 -- 就近原则

        // var name = '马瑞森呢'

        // function fn1(){
        //     // var name = '边玉良'
        //     function fn2(){
        //         // var name = '家制造'
        //         console.log(name1);
        //     }
        //     fn2()
        // }

        // fn1()


        // function fn1(){
        //     var aaa = 'hello'
        // }
        // console.log(aaa);

        // 闭包 (Closure)
        // 函数嵌套函数,外层函数可以访问内部的变量

        /**
         * scope -- 作用域
         * Closure -- 闭包
         * 
         * ***/

        // var aaa = 1

        // function fn1(){
        //     var aaa = 2
        //     return function(){
        //         console.log(aaa);
        //     }
        // }
        // // fn1()
        // fn1()()

        // 函数
        // function addNum(a){
        //     return function(b){
        //         console.log( a + b )
        //     }
        // }

        // let add = addNum(5)
        /**
         * add = function(b){console.log(5 + b)}
         * 
         * 
         * *****/
        // console.log(add);

        // let add1 = addNum(10)

        // add(15)  // 
        // add1(15)  // 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值