[英]Closures - Compilation vs Interpretation phase javascript
//代码开始
var a = 10;
function outer() {
function inner() {
console.log(a);
console.log(b);
};
var b = 20;
return inner;
}
var innerFn = outer();
innerFn();
//代码结尾
我的问题是:
在Closures中,函数会记住从创建函数对象时起的作用域信息(在上述情况下,在编译阶段),但是那时(a和b)的分配尚未真正发生。 因此,如何保留变量a和b的值。
如果上述陈述有误,请纠正我。
正如您在第一句话中所说的那样,闭包会记住作用域信息 。 这包括对变量的引用,这些变量将已经声明(或与函数同时声明)。 这些变量具有什么值都没有关系-在调用闭包时实际使用变量时将对它们进行评估。
你会发现,当你覆盖a
已经创造了关闭后outer()
调用,它会给你的新价值a
打电话时innerFn()
闭包不记得其创建时的值 。
我相信在这种情况下,闭包实际上是在您返回inner
时创建的,而不是在定义函数inner
。 在创建对函数的引用之前,闭包机制将毫无意义。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.