js-闭包

作者: 好奇而已 | 来源:发表于2017-04-21 19:45 被阅读16次

为什么写闭包: 1.被人说复杂,想整清晰.其实很好理解. 2.闭包在开发中用途很多.面试经常问,必须弄懂. 为什么写出为什么:给自己一个说服自己行动的正当理由.

闭包知识:

阮一峰博客,这篇易懂

知乎方方专栏

为什么要使用闭包?

出于种种原因,我们有时候需要得到函数内的局部变量。但是,前面已经说过了,正常情况下,这是办不到的,只有通过变通方法才能实现。
那就是在函数的内部,再定义一个函数。

  function f1(){
    var n=999;
    function f2(){
      alert(n); // 999
    }
  }

  • 在上面的代码中,函数f2就被包括在函数f1内部,这时f1内部的所有局部变量,对f2都是可见的。但是反过来就不行,f2内部的局部变量,对f1就是不可见的。这就是Javascript语言特有的"链式作用域"结构(chain scope),子对象会一级一级地向上寻找所有父对象的变量。所以,父对象的所有变量,对子对象都是可见的,反之则不成立。
    既然f2可以读取f1中的局部变量,那么只要把f2作为返回值,我们不就可以在f1外部读取它的内部变量了吗!
  function f1(){
    var n=999;
    function f2(){
      alert(n); 
    }
    return f2;
  }
  var result=f1();
  result(); // 999

上一节代码中的f2函数,就是闭包。
闭包就是能够读取其他函数内部变量的函数。
由于在Javascript语言中,只有函数内部的子函数才能读取局部变量,因此可以把闭包简单理解成"定义在一个函数内部的函数"。
所以,在本质上,闭包就是将函数内部和函数外部连接起来的一座桥梁。

闭包的用途

闭包可以用在许多地方。它的最大用处有两个,一个是前面提到的可以读取函数内部的变量,另一个就是让这些变量的值始终保持在内存中。


相关文章

  • js-闭包

    对于闭包的理解,一直很浅懂,特别有时候跟匿名函数混淆。所以收集下面各路对于闭包的讲解。 维基百科中的解释:“在计算...

  • js-闭包

  • Js-闭包

    「闭包」 要理解什么闭包,首先要知道闭包为啥出现,实际代码中,我们想在某一的作用域中使用一个变量,很简单,直接在外...

  • js-闭包

    为什么写闭包: 1.被人说复杂,想整清晰.其实很好理解. 2.闭包在开发中用途很多.面试经常问,必须弄懂. 为什么...

  • JS-闭包

    一、闭包简介1、函数内部的函数可以生成闭包2、闭包的应用:需要多个内部变量值3、闭包弊端闭包:会倒致函数运行结束后...

  • js-闭包

    了解闭包前,先了解变量:局部变量和全局变量。 接下来的问题是,如何从外部获取局部变量: 如上,f5可以读取f4中的...

  • JS-闭包

    0.闭包 理解闭包的关键在于:外部函数调用之后其变量对象本应该被销毁,但闭包的存在使得我们仍旧可以访问外部函数的变...

  • js-闭包

    今天学习的概念是闭包一般的计数器需要借助全局变量 var counter = 0; //全局变量function ...

  • JS-闭包

    了解闭包前,首先要知道声明是变量作用域变量根据作用域的不同分为两种:全局变量和局部变量。1.函数内部可以使用全局变...

  • JS-读懂闭包

    长久以来,闭包是前端同学面试必考的问题。会用闭包也成了高级前端开发者的标志,今天就来彻底弄清楚闭包的每一个细节。 ...

网友评论

      本文标题:js-闭包

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