繁体   English   中英

闭包-编译与解释阶段javascript

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM