闭包初学理解

闭包

1.闭包是什么

在JavaScript中变量属于本地和全局作用域,即局部变量和全局变量。

 <script>
        var a = 1; //全局变量
​
        function fn() {
            var b = 2; //局部变量
        }
        //全局变量活得和您的应用程序(窗口、网页)一样久。
        //局部变量活得不长。它们在函数调用时创建,在函数完成后被删除。
    </script>

而JavaScript语言的特别之处就在于:函数内部可以直接读取全局变量,但在函数外面无法读取函数内部的局部变量。

<script>
        var a = 1; //全局变量
​
        function fn() {
            var b = 2; //局部变量
            console.log(a); //可以获取
        }
        console.log(b); //获取不到
    </script>

但有时需要从外部读取内部的局部变量,因为在JavaScript中只有函数内部的函数才能读取局部变量

所以可以这样做:

<script>
        function fn1() {
            var a = 10;//局部变量
​
            function fn2() {
                console.log(a);
            }
            fn2();
        }
        fn1();//可以获取局部变量a
    </script>

也可以这样做

<script>
        function fn3() {
            var a = 10;
            return a;
        }
    </script>

但这样的写法无法共享局部变量以及长久的保存变量,而全局变量可能会造成变量污染,

这时我们就需要一种方法既可以长久的保存变量又不会造成全局污染

即 闭包:

<script>
        function fn1() {
            var a = 10;
​
            function fn2() {
                a++;
                console.log(a);
            }
            return fn2;
        }
        var fn = fn1(); //fn1()执行的结果就是闭包
        fn(); //当fn()在不断调用时,a的状态会被保存,不会在fn1()执行完后释放
    </script>

简化写法

<script>
        function fn1() {
            var a = 10;
            return function() {
                a++;
                console.log(a);
            }
        }
        var fn = fn1();
        fn1();
    </script>

2.闭包的定义

闭包就是能够读取其他函数内部变量的函数。

因为在JavaScript中只有函数内部的函数才能读取局部变量,所以也可以将闭包简单理解成“定义在一个函数内部的函数”。

因此,闭包在本质上是连通函数内外的一个桥梁,可以实现局部变量常驻内存。

闭包有权在一个函数内访问另一个函数作用域中的变量(返回该函数)

3.为什么需要闭包

闭包最大的用处有两个:

  • 读取函数内部的局部变量。

  • 让这些被读取的变量始终保存在内存当中,调用之后不会被自动清除。

一般的获取局部变量的方法无法使局部变量长久的保存及共享,为此我们需要使用闭包的方法使变量

长久的保存且不会造成全局污染。

因为闭包就是一个函数引用另外一个函数的变量,而被引用的变量不会被回收,所以可以用来封装变量。

不必要的闭包只会徒增内存损耗!

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值