一、闭包的概念
当函数可以记住并访问所在的词法作用域时,就产生了闭包,即使函数时在当前词法作用域之外执行。
下面用一些代码来解释这个定义。
function foo(){var a = 2;function bar() {console.log(a);}bar();
}foo();
这段代码看起来和嵌套作用域中的示例代码很相似。基于词法作用域的查找规则,函数bar()可以访问外部作用域中的变量a(这个例子中的事一个RHS引用查询)。
技术上来讲,也许是。但根据前面的定义,确切地说并不是。我认为最准确地用来解释bar()对a的引用的方法是词法作用域的查找规则,而这些规则只是闭包的一部分。()
1.1 实质问题
一、闭包的概念
闭包需要满足的条件:
<1>. 必须有外部的封闭函数,该函数必须至少被调用一次(每次调用都会创建一个新的模块实例)
<2>.封闭函数必须返回至少一个内部函数,这样内部函数才能在私有作用域中形成闭包,并且可以访问或者修改私有的状态。
下面用一些代码来解释这个定义。
function foo() {var a = 2;function bar() {console.log(a);}bar();
}foo();
这段代码看起来和嵌套作用域中的示例代码很相似。