JS闭包的最简单例子使用

function foo() { var a = 2;

function baz() { console.log( a ); // 2

}

bar( baz ); }

function bar(fn) {

fn(); // 妈妈快看呀,这就是闭包!

}

把内部函数 baz 传递给 bar,当调用这个内部函数时(现在叫作 fn),它涵盖的 foo() 内部

作用域的闭包就可以观察到了,因为它能够访问 a。



 

实战:

前面的代码片段有点死板,并且为了解释如何使用闭包而人为地在结构上进行了修饰。但 我保证闭包绝不仅仅是一个好玩的玩具。你已经写过的代码中一定到处都是闭包的身影。 现在让我们来搞懂这个事实。

function wait(message) {

         setTimeout( function timer() {

             console.log( message );

}, 1000 ); }

wait( "Hello, closure!" );

 

将一个内部函数(名为 timer)传递给 setTimeout(..)。timer 具有涵盖 wait(..) 作用域

的闭包,因此还保有对变量 message 的引用。

wait(..) 执行 1000 毫秒后,它的内部作用域并不会消失,timer 函数依然保有 wait(..)

作用域的闭包。

深入到引擎的内部原理中,内置的工具函数 setTimeout(..) 持有对一个参数的引用,这个 参数也许叫作 fn 或者 func,或者其他类似的名字。引擎会调用这个函数,在例子中就是 内部的 timer 函数,而词法作用域在这个过程中保持完整。

这就是闭包。

你可能感兴趣的:(JS闭包的最简单例子使用)