Javascript的闭包理解

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


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语言中,只有函数内部的子函数才能读取局部变量,因此可以把闭包简单理解成"定义在一个函数内部的函数"。
所以,在本质上,闭包就是将函数内部和函数外部连接起来的一座桥梁。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容