重学JS之闭包

48 阅读1分钟

闭包是什么:闭包是指那些能够访问自由变量的函数

1. 从理论角度

所有的函数。因为它们都在创建的时候就将上层上下文的数据保存起来了。哪怕是简单的全局变量也是如此,因为函数中访问全局变量就相当于是在访问自由变量,这个时候使用最外层的作用域。

2. 从实践角度:以下函数才算是闭包:

1.  即使创建它的上下文已经销毁,它仍然存在(比如,内部函数从父函数中返回)
2.  在代码中引用了自由变量

我们一般接触的函数或者我们理解的闭包是:A函数包含B函数,并返回了B函数,并且B函数引用了A函数中的变量。

            function checkScope() {
                var scope = "local scope";
                function f() {
                    return scope;
                }
                return f;
            }
            var foo = checkScope();
            console.log(foo());

以上代码输入 local scope ,因为作用域链以及函数中的变量的关系,执行f函数查找的是f的作用域链checkScope中的变量的scope。所以输出的“local scope”这个字段。