美文网首页
Closure JavaScript中的闭包

Closure JavaScript中的闭包

作者: 四月白绵羊 | 来源:发表于2019-10-08 04:49 被阅读0次

维基百科中的解释,闭包存储了函数以及函数定义时的环境变量(自由变量)。

在谈闭包的时候,有个概念需要说明一下:Scope Chain 作用域链。

Scope Chain

每个函数都有自己的作用域以及外部的作用域,甚至是全局的作用域。当函数试图访问一个变量的时候,会现在这个函数的local env中查找。如果没有,就到外部环境中查找。一层一层往外寻找,直到找到对应的变量或者到达了global env还是没有找到,那么这个变量就是undefined。
举一个例子:

let txt = 'This is outsides.';
function log () {
    let txt = 'This is insides.';
    console.log(txt);
}
log();

// The output: This is insides.

输出的结果是This is insides而不是This is insides.的原因就是,函数先从最内层作用域开始寻找这个变量,一旦找到了就不在接着寻找了。

Use Case

  1. 缓存变量
    当你在闭包当中访问了外部变量的时候,这个变量会被添加到这个闭包当中,即Execution Context。这种办法能使得外部的一些临时变量不会被当做垃圾清理了。

  2. 实现单例
    其实这也是缓存变量的应用。在代码上:

class Earth(){...}

function TheEarth(){
  let singleton = null;
  return {
      getEarth(){
        if (singleton){ return singleton; }
        createEarth();
        return singleton;
      }
      createEarth(){ singleton = new Earth(); }
  }
}

export default TheEarth();

然后,你就可以调用了:

import TheEarth from '../Earth';

TheEarth.getEarth()

相关文章

  • 闭包

    学习Javascript闭包(Closure)

  • JavaScript----闭包

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

  • js经典题目

    1闭包 链接:学习Javascript闭包(Closure) setTimeout在js单线程中只是放在队列中并未...

  • 浅谈 JavaScript 闭包

    相信学习 JavaScript 的同学都知道「闭包(Closure)」,这个概念在 JavaScript 中是非常...

  • js闭包是什么?

    一、闭包是什么?   闭包(closure)就是能够读取其他函数内部变量的函数。在javascript中,只有函数...

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

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

  • 笔记:JavaScript闭包

    本文摘录及参考自:1. 学习Javascript闭包(Closure)2. 闭包的秘密3. JavaScript ...

  • javascript 闭包

    什么闭包(closure) 简单来说,在JavaScript中闭包让我们可以在内部函数中访问其外部函数的作用域...

  • 闭包关系

    一、闭包是什么? 闭包(closure)就是能够读取其他函数内部变量的函数。在javascript中,只有函数内部...

  • 关于rust中的闭包(一)

    闭包 在计算机中,闭包 Closure, 又称词法闭包 Lexical Closure 或函数闭包 functio...

网友评论

      本文标题:Closure JavaScript中的闭包

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