• javascript理解js中的闭包


    在javascript中变量有其作用域,如果在函数内部var一个变量,那么在函数外部一般情况下是不能被引用的。

    function outerFun()
    {
     var a =0;
     alert(a);  
    }
    var a=4;
    outerFun();
    alert(a);

    结果是 0,4 .  因为在函数内部使用了var关键字 维护a的作用域在outFun()内部.

    闭包的作用就是使用变通的方法来访问函数内部的局部变量。

    参照下面的例子和输出结果:

    function outFun() {
                var aa = 0;
                function innerFun() {
                    aa++;
                    alert(aa);
                }
                return innerFun;//这里很重要
            }
            var testFun = outFun();
            testFun(); //1
            testFun();//2
            var testFun2 = outFun();
            testFun2();//1

    当内部函数 在定义它的作用域 的外部 被引用时,就创建了该内部函数的闭包 ,如果内部函数引用了位于外部函数的变量,当外部函数调用完毕后,这些变量在内存不会被 释放,因为闭包需要它们.

    那 么我们来想象另一种情况,如果outFun返回的不是函数innerFun,情况就完全不同了。因为outFun执行完后,innerFun没有被返回给a的外界,只是被outFun所引用,而此时outFun也只会被innerFun引 用,因此函数outFun和innerFun互相引用但又不被外界打扰(被外界引用),函数outFun和innerFun就会被GC回收。

    闭包另外一个作用就是可以让变量常驻内存中,避免被GC回收。所以弊端也很明显,占用内存,可能会造成性能问题,在ie中可能导致内存泄露,因此不能滥用闭包,在不用的时候需要删除。

    由于在函数外部也可以修改变量的值,在使用变量的时候要格外小心。

  • 相关阅读:
    攻防世界web新手区前六关
    JS-数组基础知识3
    CSRF攻击的原理和spring security对CSRF攻击的解决方法
    Java开发微信公众号
    内部类
    Java Web整合开发(30) -- Spring的ORM模块
    win10安装mysql
    jquery 事件冒泡的介绍以及如何阻止事件冒泡
    jquery中attr和prop的区别介绍
    jQuery 层次选择器
  • 原文地址:https://www.cnblogs.com/hiflora/p/4299721.html
Copyright © 2020-2023  润新知