专栏首页smh的技术文章javascript之闭包基础和注意点

javascript之闭包基础和注意点

闭包是JavaScript必须了解的一个知识点。

什么是闭包?

闭包就是值有权访问另一个函数作用域中的变量的函数,常见的方式就是:在一个函数内部创建另一个函数,并把这个函数作为返回值。

代码部分:

function adolescent(ages) {
    var age=24;

    //返回一个匿名函数
    return function (additional) {
        return age+ages+additional;
    }
}
var adult = adolescent(1);//获取到返回的函数
var result = adult(2);//执行函数

首先创建了一个函数adolescent,然后返回了一个匿名函数,匿名函数中则使用了局部变量age和ages,由于js的作用域链的关系,所以是可以访问父级函数的变量。

然后在匿名函数中使用了父级作用域的变量,在返回这个函数。

然后我们执行adolescent函数,获取到返回的匿名函数,在这里的作用域是全局作用域,然后却用到了局部的变量,这就是闭包。

最后用了变量adult接受这个匿名函数,然后执行。

闭包在我们开发就会不知觉用到,也许你自己都还不知道。

注意点:

过度使用闭包会占用更多内存。

一般情况下,在函数执行完毕后,其中的局部变量都会自动销毁,内存中仅保存着全局作用域的变量对象。

但是在另一个函数内部定义的函数(也就是闭包)会包含父级函数的作用域的变量对象。

就拿上面的代码说:返回的是一个匿名函数,这个函数就包含了adolescent函数的作用域对象,所以当adolescent执行完后,他的作用域上的变量仍然存在内存中。

由于上述使用了adult变量来接受这个函数,而这个变量在全局变量中,所以内存不会释放,所以我们只有手动释放内存,即在最后把adult的引用设置为null就可以释放内存。

adult=null;//手动释放内存

闭包是依靠了js的作用域链的特性而来的。

闭包的应用的地方还是非常多的,需要大家灵活应用,最重要的是要考虑到释放内存

如无作者授权,请勿转载。

本文参与 腾讯云自媒体分享计划 ,欢迎热爱写作的你一起参与!
本文分享自作者个人站点/博客:https://www.sammh.com/复制
如有侵权,请联系 cloudcommunity@tencent.com 删除。
登录 后参与评论
0 条评论

相关文章

  • javascript之闭包基础了解

    闭包就是值有权访问另一个函数作用域中的变量的函数,常见的方式就是:在一个函数内部创建另一个函数,并把这个函数作为返回值。

    小明爱学习
  • JavaScript初探之闭包

      要理解闭包,首先要从作用域开始。   ● 变量作用域的概念:就是一个变量可以使用的范围   ● JS中首先有一个最外层的作用域:称之为全局作用域   ● J...

    文渊同学
  • JavaScript闭包之for循环

    我们预想的是点击哪个弹出哪个数,但实际上每一次弹出的i都是3。因为我们循环之后得到的是这样的:

    wade
  • 深入理解JavaScript闭包之什么是闭包

    在看本篇文章之前,可以先看一下之前的文章 深入理解JavaScript 执行上下文 和 深入理解JavaScript作用域,理解执行上下文和作用域对理解闭包有很...

    木子星兮
  • JavaScript 核心特性之《闭包》

    其实闭包这个话题一直也是面试高频题,我在面试当中有 80% 的时候面试官会问我闭包的特性以及实际的应用场景。闭包也确实是 JavaScript 中的核心特性,在...

    用户9057722
  • JavaScript——作用域和闭包

    本文着重于对 JavaScript 中的作用域和闭包机制进行剖析和说明,闭包本质上也是作用域的一种类型,因为在 JavaScript 里非常重要,所以我们把它在...

    Html5知典
  • 详解javascript作用域和闭包

    版权声明:本文为吴孔云博客原创文章,转载请注明出处并带上链接,谢谢。 https://blog.csdn.net/wkyseo/article/deta...

    空空云
  • javascript技能填坑之闭包

    哪哪都说闭包重要重要,虽然它确实很重要(废话),但它重要在哪里呢? 先说结论,我个人以为,闭包就重要在,它形成了一个单独的作用域。 那单独的作用域又有什么重要的...

    web前端教室
  • JavaScript 基础(六) 数组方法 闭包

    在一个对象中绑定函数,称为这个对象的方法。 在JavaScript 中,对象的定义是这样的;     var guagua = {         na...

    用户1197315
  • JavaScript之作用域和闭包

    keyWords
  • 深入理解JavaScript闭包之闭包的使用场景

    本篇文章是上一篇 深入理解JavaScript闭包之什么是闭包文章的下篇,闭包的使用场景。

    木子星兮
  • 前端入门19-JavaScript进阶之闭包声明正文-闭包

    作为一个前端小白,入门跟着这几个来源学习,感谢作者的分享,在其基础上,通过自己的理解,梳理出的知识点,或许有遗漏,或许有些理解是错误的,如有发现,欢迎指点下。

    请叫我大苏
  • 全面理解Javascript闭包和闭包的几种写法及用途

    好久没有写博客了,过了一个十一长假都变懒了,今天总算是恢复状态了。好了,进入正题,今天来说一说javascript里面的闭包吧!本篇博客主要讲一些实用的东西,...

    挨踢小子部落阁
  • JavaScript之闭包就是个子公司

    公司会接收一些原料,进行一些处理,也会返回一些东西。【函数接收参数,进行处理,会有返回值】

    zqb_all
  • js基础之闭包与继承

    1、原型链是JS特有的一种继承机制 2、原型链会涉及到___proto___,prototype 3、原型链的顶端就是null 4、应用场景:继承 5、...

    前端江太公
  • JavaScript: 零基础轻松学闭包(2)

    剽悍一小兔
  • 前端基础进阶(五):JavaScript 闭包详细图解

    初学JavaScript时,我在闭包上,走了很多弯路。而这次重新回过头来对基础知识进行梳理,要讲清楚闭包,也是一个非常大的挑战。

    一只图雀

扫码关注腾讯云开发者

领取腾讯云代金券