闭包
闭包是JavaScript语言中很重要的一部分。在node领域最后回调程序中它们显得非常突出,提供了优秀的机制去处理JavaScript任务中的异步操作。
为了正确的理解闭包,举一个作用域链的栗子:
someFunc()
↑
inner()
↑
foo()
在someFunc()中声明一个变量bar
someFunc()
var bar
↑
...
鉴于嵌套作用域的工作机制,在someFunc()的内部作用域中是可以访问变量bar的。在这个例子中,我们让inner()函数去请求变量bar:
someFunc()
var bar
↑
inner()
alert(bar)
↑
...
之后,inner()函数就被称为是封闭了bar变量,因此inner()函数就是一个闭包。
执行这种回调方式的代码后,如果inner()函数没有立即执行,闭包将会一直保持着。通过someFunc()函数返回inner对象稍后再执行,这种方式在JavaScript中是合法的。在整个过程中,bar变量一直都可以被获取到。