闭包是由函数和与其相关的引用环境组合而成的实体(wikipedia-闭包)
闭包由两部分组成:一是函数,二是与这个函数相关的引用环境,即函数及函数内部能访问到的变量组成了一个闭包
(function fn(){
var name="小明"
function showName(){
console.log(name)
}
showName()
})() //小明
函数fn是一个立即执行函数,变量 name
和函数 showName()
就组成了一个闭包,这里变量 name
所在的上下文就是上文所说的引用环境。
对上面的立即执行函数做一点改动:
function fn(){
var name="小明"
return function showName(){
console.log(name)
}
}
var yourName = fn()
yourName()
代码改动后,我们不在函数fn内部调用函数showName(),而是将showName()函数作为fn函数的返回值返回出来,同时,我们在函数外定义了一个变量yourName来引用函数fn(),因此yourName执行时就相当于fn()被调用,而showName()函数一样需要调用其外部的变量name,因此函数showName()和变量name就组成了一个闭包。
- 闭包的作用
闭包可以间接的访问一个变量,也就是可以使一个函数访问到另一个函数内部的变量。