闭包是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的作用域链的特性而来的。
闭包的应用的地方还是非常多的,需要大家灵活应用,最重要的是要考虑到释放内存
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。