美文网首页
JavaScript深入之闭包

JavaScript深入之闭包

作者: JAZI | 来源:发表于2020-07-14 22:50 被阅读0次

MDN对闭包的定义为:闭包是指那些能够访问自由变量的函数。
自由变量 是指在函数中使用的,但既不是函数参数(形参)也不是函数的局部变量的变量。

ECMAScript中,闭包指的是:

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

从实践角度:

以下情况的函数才算是闭包:

  • 即使创建它的上下文已经销毁,它仍然存在(比如,内部函数从父函数中返回)
  • 在代码中引用了自由变量
var scope = "global scope";
function checkscope(){
    var scope = "local scope";
    function f(){
        return scope;
    }
    return f;
}

var foo = checkscope();
foo();

f 执行上下文维护了一个作用域链

fContext = {
    Scope: [AO, checkscopeContext.AO, globalContext.VO],
}

就是因为这个作用域链,f 函数依然可以读取到 checkscopeContext.AO 的值,说明当 f 函数引用了 checkscopeContext.AO 中的值的时候,即使 checkscopeContext 被销毁了,但是 JavaScript 依然会让 checkscopeContext.AO 活在内存中,f 函数依然可以通过 f 函数的作用域链找到它,正是因为 JavaScript 做到了这一点,从而实现了闭包这个概念.

从执行上下文去思考它们的差异

var data = [];

for (var i = 0; i < 3; i++) {
  data[i] = function () {
    console.log(i);
  };
}

data[0]();
data[1]();
data[2]();
var data = [];

for (var i = 0; i < 3; i++) {
  data[i] = (function (i) {
        return function(){
            console.log(i);
        }
  })(i);
}

data[0]();
data[1]();
data[2]();

相关文章

  • 闭包

    原文出处 JavaScript深入之闭包 定义 MDN 对闭包的定义为: 闭包是指那些能够访问自由变量的函数。 那...

  • 深入理解javascript原型和闭包[目录]

    文章地址:深入理解javascript原型和闭包 文章:深入理解javascript原型和闭包 目录列表 (不能跳...

  • 深入理解javascript原型和闭包(完结)

    深入理解javascript原型和闭包(1)——一切都是对象 深入理解javascript原型和闭包(2)——函数...

  • JavaScript----闭包

    javascript之闭包 闭包的概念     闭包(closure)是 JavaScript 的一种语法特性。 ...

  • JavaScript深入之闭包

    已离开简书,原因参见 http://www.jianshu.com/p/0f12350a6b66。 虽人微言轻,但...

  • JavaScript深入之闭包

    MDN对闭包的定义为:闭包是指那些能够访问自由变量的函数。自由变量 是指在函数中使用的,但既不是函数参数(形参)也...

  • JavaScript深入之闭包

    JavaScript深入系列第八篇,介绍理论上的闭包和实践上的闭包,以及从作用域链的角度解析经典的闭包题。 定义 ...

  • JavaScript深入理解-闭包(Closure)

    推荐文章:学习Javascript闭包(Closure)- 阮一峰javascript深入理解-从作用域链理解闭包...

  • 深入理解javascript原型和闭包

    王福朋 - 博客园 —— 《 深入理解javascript原型和闭包》 目录:深入理解javascript原型和闭...

  • javascript函数,以及闭包的理解

    javascript函数,以及闭包的理解 深入理解javascript函数定义与函数作用域深入理解javascri...

网友评论

      本文标题:JavaScript深入之闭包

      本文链接:https://www.haomeiwen.com/subject/mvuqhktx.html