美文网首页
Javascript的闭包理解

Javascript的闭包理解

作者: chilli_dn | 来源:发表于2016-05-06 16:18 被阅读20次

    “官方”的解释是:所谓“闭包”,指的是一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分。反正我是没看懂,因为描述的太学术。直接上例子吧,

    
    function out(){
      var i=0;
      function inside(){
          console.log(++i);
      }
      return inside;
    }
    var o=out();
    o();//1
    o();//2
    
    

    这段代码有两个特点:
    1、函数inside嵌套在函数out内部;
    2、函数out返回函数inside。

    这样在执行完var o=out( )后,其中,o的值就是内部定义的函数inside,可是,多次调用o(),会在控制台输出不同的值。为什么呢?
    因为inside函数创建的同时,生成了一个闭包,函数创建处的词法环境被保存到了这个闭包中。
    当通过o调用这个inside函数时,函数内的变量,是到创建时的词法环境中去解析的,而不是到当前的调用环境中解析。因此,i会找到var i=0;处的i。又因为,词法环境中保存的是i的引用,所以,多次调用修改的是同一个i,因此每次调用的控制台显示的结果不同。
    我的理解是,闭包就是能够读取其他函数内部变量的函数,类似于java中的作用域。
    由于在Javascript语言中,只有函数内部的子函数才能读取局部变量,因此可以把闭包简单理解成"定义在一个函数内部的函数"。
    所以,在本质上,闭包就是将函数内部和函数外部连接起来的一座桥梁。

    相关文章

      网友评论

          本文标题:Javascript的闭包理解

          本文链接:https://www.haomeiwen.com/subject/byjjrttx.html