什么是闭包????
闭包(Closure)与函数有着紧密的关系,以致于许多人将函数与闭包等同起来讨论,但结果却老是讨论不清楚。闭包
事实上在JavaScript 中,一个函数只是一段静态的代码、脚本文本,所以它是一个代码书写时,以及编译期的、静态的概念;
而闭包则是函数的代码在运行过程当中的一个动态环境,是一个运行期的、动态的概念。函数
因为引擎对每一个函数创建其独立的上下文环境,所以当函数被再次执行或进入函数体内的代码时,就将会获得闭包内的所有信息。ip
闭包具备两个特色:
第一:是闭包做为与函数成对的数据,在函数执行过程当中处于激活(便可访问) 状态;
第二:是闭包在函数运行结束后,保持运行过程的最终数据状态。作用域
所以函数的闭包总的来讲决定了两件事:闭包所对应的函数代码如何访问数据,以及闭包内的数据什么时候销毁。对于前者来讲,涉及做用域(可见性)的问题;对于后者来讲,涉及数据引用的识别。编译