一句话解释就是:
- 存在自由变量的函数就是闭包。
- 一个持有外部环境变量的函数就是闭包。
- 在这个例子里函数b因为捕获了外部作用域(环境)中的变量a,因此形成了闭包。 而由于变量a并不属于函数b,所以在概念里被称之为「自由变量」。
关键点:
- 函数
- 自由变量
- 环境
例子:
let a = 1
let b = function(){
console.log(a)
}
- 在这个例子里函数b因为捕获了外部作用域(环境)中的变量a,因此形成了闭包。 而由于变量a并不属于函数b,所以在概念里被称之为「自由变量」。
情况:
- 函数作为值返回
- 直接或间接执行内部函数
特点
- 基于词法作用域的查找规则
- 在一个函数内部定义一个内部函数,然后将内部函数作为值返回,或直接or间接的立即执行内部函数
- 拥有更长的生命周期,保持对当前词法作用域的引用