【译】【nodeschool】【scope-chains-closures】闭包

闭包

闭包是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变量一直都可以被获取到。

猜你喜欢

转载自my.oschina.net/cc4zj/blog/1815078