闭包
变量的作用域
变量的作用域,就是指变量的有效范围。我们最常谈到的就是函数中声明的变量作用域。
当在函数中声明一个变量的时候,如果该变量前面没有带上关键字 var 、let 、const、其中一个,这个变量就会变成全局变量。 反之只能在这个函数中才能访问到这个变量。
作用域嵌套
当一个块或函数嵌套在另一个快或函数中时,就发生了作用域的嵌套。因此,在当前作用域中无法找到某个变量的时,引擎就会在外层嵌套的作用域中继续查找,直到找到该变量,或者抵达最外层作用域(也就是全局作用域)为止。
什么是闭包?
简单讲,闭包就是指有权访问另一个函数作用域中的变量的函数。
MDN 上面这么说:闭包是一种特殊的对象。它由两部分构成:函数,以及创建该函数的环境。环境由闭包创建时在作用域中的任何局部变量组成。
生成一个闭包
- 最常见的闭包就是在一个函数内嵌套另外一个函数。
1
2
3
4
5
6
7function func () {
var i = 1,k = 2;
function closure (){
return i + k
}
return closure
}
闭包的注意事项
- 通常,根据JavaScript 垃圾回收机制函数的作用域和他所有的变量在函数执行完成之后都会被立即销毁,但是,在创建闭包后,这个变量就会一直存在直到闭包不存在。
手动释放闭包
1 | function func (){ |
闭包的应用
可以用来做数据的缓存,因为闭包数据会一直常驻内存。
eg:
1 | var CachedSearchData = (function () { |
- 本文作者: 悲小剧
- 本文链接: https://htb58.github.io/2019/09/29/闭包/
- 版权声明: 本博客所有文章除特别声明外,均采用 Apache License 2.0 许可协议。转载请注明出处!