前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >javascript之闭包基础了解

javascript之闭包基础了解

原创
作者头像
小明爱学习
修改2020-07-27 17:37:45
3270
修改2020-07-27 17:37:45
举报
文章被收录于专栏:smh的技术文章smh的技术文章

闭包是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就可以释放内存。

代码语言:javascript
复制
adult=null;//手动释放内存

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

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 什么是闭包?
    • 过度使用闭包会占用更多内存。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档