• JavaScript闭包(closure)


    闭包(closure)

    闭包是javascript语言的一个难点,需要有足够的逻辑思维能力。

    一、变量的作用域

    变量分为两种:全局变量和局部变量。

    1.在函数内部是可以直接读取到全局变量的,如下:

    var  n = 10;
    function fn(){
            alert(n);
    }
    fn();
    
    alert结果为10.

    2.在函数外部肯定是无法读取到函数内的局部变量的,如下

    function f(){
        var n = 20;
    }
    f(); alert(n); 程序会报错:n is no defined.

    注意:大家在这个地方需要注意是,在函数内部声明变量的时候,一定加var。如果不加,相当于声明了一个全局变量。

    二、如何在外部可以读取到局部变量了。

    我们这里就引入这个闭包,来实现,就是在一个函数内在引入一个函数。

    function f1(){
        var n = 10;
        function f2(){
            alert (n);
        }
        return f2;
    }
    var result = f1();
    result();  
    结果就为:10

    三、什么叫闭包

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

    其实可以简单的理解为:定义在一个函数内部的函数,像比如上面例子中的函数f2()。

    闭包在本质上就是将函数内部和函数外部连接在一起的桥梁。

    四、闭包的用处

    1.可以读取函数内部的变量。

    2.变量持久化(变量的值始终会保存在内存中)。

    function f1(){
        var n = 10;
        return function(){
            n++;
            alert(n);
        }
    }
    var result = f1();   //外部函数赋给变量result;
    result();  //result函数第一次执行,结果为11;
    result();  //result函数第二次执行,结果为12,实现了累加,

    上面这个例子就完美诠释了变量的持久化。

    3.模块化代码,减少全局变量的污染。

     

    var abc = (function(){   //abc为外部匿名函数的返回值
        var a = 1;
        return function(){
            a++;
            alert(a);
        }
    })();
    abc();  //2 ;调用一次abc函数,其实是调用里面内部函数的返回值  
    abc();  //3

     

    五、使用闭包应注意的问题

    1.由于闭包会使函数内部中的变量都保存在来,内存消耗很大。所以不能滥用闭包,否则会造成网页的性能问题。

     

    六、最后告诉大家:其实闭包是Javascript语言的一个难点,也是它的特色,很多高级应用才会用到闭包,所以刚学的同学不懂也不要着急,在以后的不断学习中,会慢慢理解的!

     

  • 相关阅读:
    聊聊高并发系统之限流特技
    Java动态代理机制详解(JDK 和CGLIB,Javassist,ASM)
    密码技术(图解密码技术的学习总结)
    Nginx配置
    Nginx与浏览器缓存
    JAVA类加载和初始化
    [TimLinux] JavaScript 模态框可拖动功能实现——节流版
    [TimLinux] JavaScript 模态框可拖动功能实现——原始版
    [TimLinux] Python3 Coverity zeep/SOAP 库使用示例
    [TimLinux] Vue.js -- Day02 -- 第一个示例
  • 原文地址:https://www.cnblogs.com/duanduanyie/p/6534390.html
Copyright © 2020-2023  润新知