javascript之闭包基础和注意点

浏览量:73 闭包

闭包是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的作用域链的特性而来的。

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

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

评论区:

昵称:
内容:
验证码:  9013

QQ群:477600139

今日头条:前端开发梦工厂

腾讯云社区:小明爱学习

微信公众号:霓虹国的佛系少年