- 闭包的概念:
-
闭包是指函数可以捕获并访问其外部函数作用域中的变量
-
闭包是一个函数,而且存在于另一个函数当中
-
闭包可以访问到父级函数的变量,且该变量不会销毁
-
-
作用:
-
隐藏变量,避免全局污染
-
可以读取函数内部的变量
-
-
闭包实现原理:
-
利用了作用域链的特性。作用域链就是在当前执行环境下访问某个变量时,如果不存在就一直向外层寻找,最终寻找到最外层也就是全局作用域,这样就形成了一个链条。
-
举个例子:
function person(){
var age = 18;
function add(){
age++;
console.log(age);
}
return add;
}
- add就是一个闭包
- age变量由于被包裹再person中,成为局部变量,在add中,由于可调用age,add形成一个闭包
无法实现自增
person();// 19
person();// 19
要实现age的自增:
var per = person();
per();// 19
per();// 20
per();// 21
- 因为per指向person()的返回值add
- 闭包可以访问到父级函数的变量,且该变量不会销毁
- 当add函数被创建时,它会捕获person函数作用域中的age变量。然后,即使person函数执行完毕,add函数仍然保持着对age变量的引用。