什么是闭包?
官方说法:是指拥有多个变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分。
简化说法:
一个函数A里面定义另一个函数B,函数B即为闭包。
functon A(){
...
function B(){
...
}
}
闭包的特点?
- 嵌套在容器函数(A)内部的嵌套函数(B)只能在容器函数(A)内被访问
- 嵌套函数(B)继承了容器函数(A)的变量,但是 B 函数中的变量只有它自己能访问,也就是嵌套函数(B)的作用域包含容器函数(A)的作用域。
闭包保存变量
function A(a){ function B(b){ return a + b; } return B; } var C = A(1); var result = C(2); console.log(result);//输出结果 3
函数B形成一个闭包,被调用后返回函数B的引用C,执行C后输出3,因为调用A传进去的1并没有因为A的调用完成而销毁,而是被保存起来。 当B没有再被引用后销毁。
闭包命名冲突,就近原则。
function A(){ function B(num){ var c = 10;//内部变量 c return num + c; } return B; } var c = 20;//外部变量c var result = A()(c); console.log(c);//20 console.log(result)//30