• JavaScript中的变量范围以及闭包的概念


    JS变量的作用域:在JS中当在外面定义一个变量时,例如var a=3;这便是一个全局变量。

    当在函数中定义一个变量时,

    例如function(){

      var a=10;

      那么这就是一个局部变量,并且该变量只能在该函数中起作用。

      当我不定义类型时:a=10;(那么它就是一个全局变量)

    闭包的概念及作用:闭包在我理解就和java中的get方法一样,是用来获取其他函数中的内部变量的函数。

    由于在JavaScript中,只有函数内部的子函数才能读取局部变量,因此可以把闭包简单理解成“定义在一个函数内部的函数”。

    所以本质上闭包就是函数内部和函数外部连接起来的一座桥梁。

    闭包的另一个作用:可以让这些值始终保存在内存中。

    事例:

    //****JavaScript闭包*******
        var a=22;//在JS中是全局变量
        function fun(){
            alert(a);
        }
        fun();//输出结果是22
        
        function fun2(){
            //var b=11;//私有变量
            c=12;//公有变量
        }
        fun2();
        //alert(b);//获取不到b,无法输出,会报错
        alert(c);
        
        //闭包
        function fun3(){
            var d=99;
            function fun4(){
                return d;//通过fun3中的私有方法访问其父类的所有变量,以获取并返回
            }
            
            return fun4;//把fun4返回出去,间接获取返回的私有变量d的值
        }
        var e=fun3();
        alert(e());
    
    //JavaScrip中的闭包
        var name="The window";//定义全局变量
        
        var object={//定义一个名为object对象
            name:"The object",//定义其name属性,值是The object
            getNameFun:function(){//定义其getNameFun属性,值是一个function()
                return function(){
                    return this.name;//这里的this是指的window对象,所以name值就是The window
                };        
            }
        };
        alert(object.name);//结果是The object
        alert(object.getNameFun()())//object.getNameFun()是获取其该属性的值,要想执行其中方法就要在后面加一个()
        //结果是The window

    闭包使用时的注意点:

    1.由于闭包会使得函数中的变量都保存在内存中,内存消耗很大所以不能滥用闭包,否则会造成网页的性能问题,在IE中可能会导致内存泄漏。解决方案:在退出函数时,将不使用的变量全部删除。

    2.闭包会在父函数外部,改变父函数内部的值。所以你把父函数当做对象使用,把闭包当做它的公用方法,把内部变量当做它的私有属性时,一定要注意,不要随便改变父函数内部变量的值。

  • 相关阅读:
    如何理解和计算活跃度。做了张脑图。欢迎大家提意见
    在虚拟服务器调试castle项目
    生成缩略图
    自己写的分页函数
    asp.net2.0 自带的邮件发送
    在.NET下如何用WebService实现身份认证,及如何跟踪用户的访问,如类似Possport的功能,不会还是用Session吧?
    邮箱验证
    ASP.NET菜鸟之路之Request小例子
    ASP.NET菜鸟之路之Seesion小例子
    ASP.NET菜鸟之路之Response小例子
  • 原文地址:https://www.cnblogs.com/AnswerTheQuestion/p/6400797.html
Copyright © 2020-2023  润新知