专栏首页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的作用域链的特性而来的。

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

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • javascript之闭包基础了解

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

    小明爱学习
  • js中async和await的基本使用

    async和await是在es7中的内容,不过现在主流浏览器都支持,今天我们就来说说怎么用。

    小明爱学习
  • 【云+社区年度征文】ES6 import和export

    我们知道js中,值类型都是复制原始值重新开辟一块内存空间,只有引用类型才是引用地址。

    小明爱学习
  • javascript之闭包基础了解

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

    小明爱学习
  • 【答疑解惑第二十六讲】js作用域

    疑惑一 $("#test").children().remove()和$($("#test").children()).remove()的具体区别? 前者的重点...

    程序员互动联盟
  • JavaScript|箭头函数的用法

    JavaScript ES6标准新增了比较重要的一种新的函数:Arrow Function(箭头函数),但大多数人都不能很好的了解箭头函数的用法,也不能区别箭头...

    算法与编程之美
  • JavaScript 知识点整理

    JavaScript是按照ECMAScript标准设计和实现的,后文说的JavaScript语法其实是ES5的标准的实现。 先说说有哪些基础语法? 最基础语法有...

    用户1667431
  • 还担心面试官问闭包?

    为什么我们需要理解并且掌握闭包,且不说大道理,就问你要不要成为JavaScript高手?不要?那你要不要面试找工作嘛。。。

    Nealyang
  • 还担心面试官问闭包?

    为什么我们需要理解并且掌握闭包,且不说大道理,就问你要不要成为JavaScript高手?不要?那你要不要面试找工作嘛。。。

    JSCON简时空
  • JavaScript 知识点整理

    JavaScript是按照ECMAScript标准设计和实现的,后文说的JavaScript语法其实是ES5的标准的实现。 先说说有哪些基础语法? 最基础语法有...

    用户1667431

扫码关注云+社区

领取腾讯云代金券