• 分析javascript关闭


    1.什么是闭包


    1)官方解释


    一个拥有多个变量和绑定了这些变量的环境的表达式(一般是一个函数)。因而这些变量也是该表达式的一部分。

    我的理解:所谓的闭包就是连接函数内部和函数外部的一座桥梁。使得在外部也可以訪问到函数内部的变量。


    2)闭包的特点


    A:作为一个函数变量的一个引用,当函数返回时,其处于激活状态。

    B:一个闭包就是当一个函数返回时,一个没有释放资源的栈区。

     

    2.闭包的用途


    A:读取函数内部变量

    <span style="font-family:SimSun;font-size:18px;">function People(name) {
                var name ="张三";
                return function () {
                    alert(name);
                }
            }
            var Job = new People();
            Job();</span>

    解释:正如上述的代码所看到的,name是定义在People中的函数,是函数People中的局部变量,而我们在外部是无法訪问到的,可是People函数返回了一个内部函数,而这个内部函数是对变量name的一个引用,这就形成了一个闭包,所以在外部也能够訪问到People函数的内部变量(特点一);正如上述代码所看到的,假设name在函数People调用完后不能再訪问的话,则将被释放。而在本例中却被还有一个函数所返回,所以还会包括在栈中(特点二)。


    B:保存变量始终在内存中

    这也是闭包的不利处之所在地,由于闭包会使得函数中的变量保存在内存中,内存消耗非常大,所以不能滥用闭包。否则会造成网页载入缓慢问题等,解决办法就是在退出函数之前,来销毁不使用的局部变量。

     

    3.思考题


    1)样例1

    <span style="font-family:SimSun;font-size:18px;">function Test1() {
                var a = 0;
                function Test2() {
                    a++;
                    alert(a);
                }
            }
    
            Test2();//是错误的。作用域在Test1,外部无法訪问到</span>

    2)改动后

    <span style="font-family:SimSun;font-size:18px;">function Test1() {
                var a = 0;
                function Test2() {
                    a++;
                    alert(a);
                }
                return Test2; //改动操作例如以下
            }
            var obj = Test1();
            obj();//返回1
            obj();//返回2  
            var obj2 = Test1();
            obj2();//返回1
            obj2();//返回2</span>


    4.小结

    以上就是对闭包的所有理解。简单的一句话:闭包就是搭建外部函数与内部函数的桥梁。

    上述仅仅是对闭包的一点点了解。有疑问之处,还请多多指正。



    

    版权声明:本文博客原创文章,博客,未经同意,不得转载。

  • 相关阅读:
    第一堂课20210302
    第一堂课20210301
    第一堂课20210301
    实验2-3-1 求1到100的和 (10分)
    实验2-3-2 求N分之一序列前N项和 (15分)
    实验2-3-3 求奇数分之一序列前N项和 (15分)
    实验2-3-4 求简单交错序列前N项和 (15分)
    实验2-3-5 输出华氏-摄氏温度转换表 (15分)
    实验2-3-6 求交错序列前N项和 (15分)
    实验2-3-7 求平方与倒数序列的部分和 (15分)
  • 原文地址:https://www.cnblogs.com/hrhguanli/p/4713362.html
Copyright © 2020-2023  润新知