面试老被问到闭包相关的问题, 之前也一直答的不是很好. 最近研究了一下闭包相关的一些内容, 以下是我个人的一些理解.
闭包指什么
Closures are functions that refer to independent (free) variables (variables that are used locally, but defined in an enclosing scope). In other words, these functions ‘remember’ the environment in which they were created.
这段话来自MDN - Closures(Last updated by: SphinxKnight, Sep 8, 2016, 1:06:52 AM), 简单的说就是: 当一个函数中使用了其他作用域中的变量, 它就是一个闭包. 闭包能够"记住"其创建时所在的环境
.
下面还有一段解释:
A closure is a special kind of object that combines two things: a function, and the environment in which that function was created. The environment consists of any local variables that were in-scope at the time that the closure was created.
这里说闭包是含有一个函数以及创建时所处环境的对象
.
可以看出, MDN上对闭包的指代并不明确, 并不知道是指代函数还是函数加创建环境所组成的对象.
《JavaScript高级程序设计》中对闭包的解释是:
闭包是指有权访问另一个函数作用域中的变量的函数
其后对闭包的详细描述也都是将函数视为闭包的.
结合网络上其他的一些解释, 我认为:闭包指的是一个函数
.
当然, 这个函数需要能”记住”创建时所在环境, 具体细节后面会讨论.