一、理解闭包
1、如何产生闭包
- 当一个嵌套的内部(子)函数引用了嵌套的外部(父)函数的变量(函数)时,就产生了闭包
2、闭包到底是什么(使用chrome调试查看)
- 理解一:闭包是嵌套的内部函数(绝大多数人理解)
- 理解二:包含被引用变量(函数)的对象(少数人理解)
- 注意:闭包存在于嵌套的内部函数中
3、产生闭包的条件
- 函数嵌套
- 内部函数引用了外部函数的数据(变量/函数)
- 执行外部函数
function fn1 () {
var a = 2
var b = 'abc'
function fn2 () { //执行函数定义就会产生闭包(不用调用内部函数)
console.log(a)
}
// fn2()
}
fn1()
二、常见的闭包
1、将函数作为另一个函数的返回值
// 1. 将函数作为另一个函数的返回值
function fn1() {
var a = 2
function fn2() {
a++
console.log(a)
}
return fn2
}
var f = fn1() // 实际上,这时调用外部函数时已经产生了闭包,此时外边将得到一个包含闭包的函数,当你调用这个函数的时候,就能访问这个闭包里所有的数据【变量、函数】
f() // 3
f() // 4 正常情况下,