关于JS闭包的理解

来源:互联网 发布:攻击根域名服务器 编辑:程序博客网 时间:2024/05/16 04:09
首先推荐两本书:

《javascript高级程序设计 第3版 》
《javascript忍者秘籍》

以前看了很多书上对“闭包”的解释,看了过后都是云里雾里,没有真正理解闭包的含义,以上两本书中对他的解释都很精辟,有例子作为佐证,可以帮助更好的理解。两本书都需要阅读者对js有基本的认识。第二本书介绍了很多比较高级的玩法,适合进阶阅读。

这里主要探讨一下“闭包”。
我的理解是:闭包是一个函数在声明时所保持的原始作用域,这个原始作用域在函数被调用时仍然存在
当然在这之前,我们需要理解js的作用域,它不同于其他的高级语言(如java),js没有块级作用域(当然ES6已经支持用let声明块级作用域的变量),js中的作用域是用function来划分的(用var声明的变量),简单点说就是一个function可以访问外部的所有变量和内部声明的变量,但是不能访问内部function中声明的变量闭包为函数的存活提供了养料,我们常常会在js中使用函数回调,传入一个匿名函数,这个匿名函数的声明环境中的所有变量在函数被调用的环境中都是透明的,这都是闭包的功劳。

闭包并不是函数在声明时作用域的快照,而是一个真实的状态封装,只要闭包存在,就可以对其进行修改。

闭包的本质还是一个函数,只不过这个函数绑定了上下文环境(函数内部引用的所有变量
原创粉丝点击