资讯专栏INFORMATION COLUMN

【js】what is 闭包

Godtoy / 903人阅读

摘要:什么是闭包给出的官方回答是闭包是由函数以及创建该函数的词法环境组合而成。这就是闭包的核心。当函数执行完后,被作为返回值函数保留在了作用域中。闭包还有一个作用是模拟私有方法和变量。闭包的缺点由上文可知闭包的作用可以使数据保存在内存中。

什么是闭包?
MDN给出的官方回答是“闭包是由函数以及创建该函数的词法环境组合而成。这个环境包含了这个闭包创建时所能访问的所有局部变量

看代码

//一个函数里面包含了另一个函数,最后已返回值返回被包裹的的函数。
function func() {
    let a = 1;
    function closer(){
        console.log(a)
    }
    return closer
}
let b = func()
b() // 1

按照正常的js作用域,当func执行完后a已经被销毁,但是变量b仍然能够访问到它里面的变量。
这就是闭包的核心。当函数执行完后,被作为返回值函数保留在了作用域中。以至于里面的数据没有被销毁,仍然可以访问到。
闭包还有一个作用是模拟私有方法和变量。要知道,js是不支持定义私有方法和变量的。
通过这个类作为对象返回私有方法和属性,便可以保证它们只可以被Create所调用。

function Create(){
   var privateCounter = 0;
   function changeBy(val) {
     privateCounter += val;
   }
   return {
        increment: function() {
          changeBy(1);
        },
        decrement: function() {
          changeBy(-1);
        },
        value: function() {
          return privateCounter;
        }
    }   
}

闭包的缺点
由上文可知闭包的作用可以使数据保存在内存中。当滥用闭包,也会导致内存占用过多,影响性能

解决闭包的问题
当你已经确定某些数据不会再被调用时,可以把闭包删除或者设为null

总结
当一个函数能够记住并访问到其所在的词法作用域及作用域链,特别强调是在其定义的作用域外进行的访问,此时该函数和其上层执行上下文共同构成闭包

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/104987.html

相关文章

  • js中函数声明与函数表达式的区别以及立即执行函数

    摘要:最近在写代码时遇到了闭包,其中闭包又和立即执行函数有点关系,于是牵扯除了函数声明以及函数表达式,我感觉中文的很多文章写的不太好,查阅了的指南和这篇关于的文章,觉得写的很好,整合一下。函数声明和函数表达式。 最近在写代码时遇到了闭包,其中闭包又和立即执行函数(immediately invoked function expression, aka IIFE)有点关系,于是牵扯除了函数声明...

    madthumb 评论0 收藏0
  • js 闭包

    摘要:但,这还不是闭包。通过访问外部变量,一个闭包可以维持这些变量。闭包经常用于创建含有隐藏数据的函数但并不总是这样。有人说应该在文章结尾对闭包进行总结,可惜小弟才疏学浅,不能给出一个精辟的总结。 越来越觉得国内没有教书育人的氛围,为了弄懂JS的闭包,我使出了我英语四级吃奶的劲去google上搜寻着有关闭包的解释,当我看到stackoverflow上这一篇解答,我脑中就出现了一句话:就是这货...

    keelii 评论0 收藏0
  • 分享一个关于匿名函数和闭包的问答

    摘要:引用一个的提问个人觉得总结的比较好的两句话原文地址另外,附上中对闭包的讲解闭包中文对于闭包的简要概括原文原文地址匿名函数和闭包来自文章作者版权声明自由转载非商用非衍生保持署名创意共享许可证转载请注明出处 引用一个stackoverflow的提问 个人觉得总结的比较好的两句话: An anonymous function is just a function that has no na...

    Barrior 评论0 收藏0
  • 关于JS函数的bind

    摘要:昨天被人问到的的作用是什么这个倒还能回答出来,之后返回一个新的函数,这个函数可以保持传递的上下文。没有完全实现规定的。比如规定了的和行为。 https://friskfly.github.io/2016/03/24/about-function-bind-in-js/ 昨天被人问到js的bind的作用是什么? 这个倒还能回答出来,bind 之后返回一个新的函数,这个函数可以保持传递的t...

    CloudwiseAPM 评论0 收藏0
  • js 闭包的使用技巧

    摘要:闭包的学术定义先来参考下各大权威对闭包的学术定义百科闭包,又称词法闭包或函数闭包,是引用了自由变量的函数。所以,有另一种说法认为闭包是由函数和与其相关的引用环境组合而成的实体。 前言 上一章讲解了闭包的底层实现细节,我想大家对闭包的概念应该也有了个大概印象,但是真要用简短的几句话来说清楚,这还真不是件容易的事。这里我们就来总结提炼下闭包的概念,以应付那些非专人士的心血来潮。 闭包的学术...

    dendoink 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<