• js世界这么大,闭包想看看


    什么是闭包,为什么要用他?
    闭包是能够访问其他函数作用域的函数。
    我们来分析下句子成分(语文大神),闭包是函数,js函数的作用域分为全局作用域,局部作用域,eval作用域,并没有块级作用域形象的讲,每个函数都是一个小黑屋,能在小黑屋里看到外面的的世界,可是外界不知道小黑屋里是啥情况,如何打开门从小黑屋出来呢,就用到了闭包。

    有几个概念必须要了解
    作用域和作用域链
    原来作用域和上下文作用域是两个不同的概念,本质上来说,作用域是基于函数的,上下文是基于对象的,作用域规定了当前执行环境对变量的访问权限,这是js中最重要一个概念。
    作用域链(词法作用域):当查找变量的时候,会先从变量本身查起,如果本身没有就从父级对象上查找,一直查到全局上下文变量对象,若无返回undefine,这个由多个执行上下文对象构成的链表就叫做作用域链。

    闭包的特点:
    1、函数内再嵌套函数
    2、内部函数可以引用外层的参数和变量。
    3、参数和变量不会被垃圾回收机制回收

    闭包的使用注意事项
      函数会使得函数中的变量保存在内存中,会占用内存,所以只有在必要的时候使用它,如果不用的话要将他为null

    MMP Show Me The Code
    function example(){
         var n=1;                              
            function example2(){       
              alert(n);     
            };    
            return example2;   
    }   
    var result=example();   result(); // 1
    在自己函数内部定义一个函数,然后再将函数值return回去
    function example1(){ 
      var n=1; 
      Add
    = function() { n+=1 }   function example2(){     alert(n);   }   return example2; }
    var result=example1(); result(); // 1 Add(); result(); // 2
    解析:result();
    函数定义了一个变量 ,调用时直接返回一个函数,example2里面没有n,沿着作用域链向上找到了n=1;
    Add();执行后n的值为2;
    然后example2向上查找时n就变成了2;





    小结:整理了一下午,到处查资料,原来探究越深才知道知道的越少,这些东西很重要,检验你是否学好可以试着给别人讲懂。
    由于自身能力有限,有些错误在所难免,欢迎指正,荣幸之至。
  • 相关阅读:
    【Java并发编程】之十一:线程间通信中notify通知的遗漏
    【Java并发编程】之十:使用wait/notify/notifyAll实现线程间通信的几点重要说明
    【Java并发编程】之九:死锁
    【Java并发编程】之八:多线程环境中安全使用集合API
    【Java并发编程】之七:使用synchronized获取互斥锁的几点说明
    多线程开发中遇到的问题
    Linux 设置IP,gate, 以及自动获取IP的方法
    C语言实现http get请求程序
    DHCP(动态主机配置协议)工作流程
    多线程程序中死锁的分析和解决方案
  • 原文地址:https://www.cnblogs.com/jinzhou/p/9072975.html
Copyright © 2020-2023  润新知