-
概念
闭包(closure) – JavaScript中最有名的东西之一.一个闭包就是一个使用了外部变量的函数.
查看下面的例子:
1 | function A(a, b, c) { |
2 | var ar = [a, b, c]; |
3 | return function B(i) { |
4 | return ar[i]; |
5 | }; |
6 | } |
7 | var b = A( 'Here' , 'I' , 'am' ); |
8 | console.log( b(1) ); |
-
描述
函数声明之后的第一条语句调用了函数A,函数A创建了一个值为数组[a,b,c]的局部变量ar,返回了一个函数B
(存储在了变量b中
),然后运行结束.
第二条语句调用了函数B
(b
),返回并打印出了数组ar.这就意味着A中的数组ar在
A结束执行后仍然存在
.但是它存储在什么地方呢?当然,在b上
!但是究竟是存在b的哪里呢?某个属性中?不是的.
这是JavaScript语言的一个核心特性:一个函数可以持有外层作用域的变量,并且除了调用该函数以外没有任何其他方法可以访问到这些变量.