什么是闭包
经常听说闭包是函数嵌套函数,内部函数可以访问外部的函数的变量,且内部函数是外部函数的返回值。让我们来详细的解读这句话。
闭包的概念
如何形成一个闭包那?
我们声明了一个函数或创建一个函数,这时闭包就已经产生了,闭包的概念正确的来说有两个
函数和对其周围状态(lexical environment,词法环境)的引用捆绑在一起构成闭包(closure)。也就是说,闭包可以让你从内部函数访问外部函数作用域。在 JavaScript 中,每当函数被创建,就会在函数生成时生成闭包。
一个为函数,一个为状态(变量)
而这个变量又是自由变量
自由变量:既可以是外部的变量,也可以是父级函数的形参(也可以理解为凡是跨了自己的作用域的变量都叫自由变量。)
那么但有人问起函数+自由变量=?那就是闭包了
闭包的特点
1,私有成员
2,避免全局变量的污染
3,闭包中的变量会长期存储再内存中
闭包的缺点
1,常驻内存,增加内存使用量。
2,使用不当会很容易造成内存泄露。
(解决泄露,在使用完后将闭包设为null)
闭包使用
1,简单的闭包
<script>
var num = 0;
function closure() {
var num = 1;
return (function () {
console.log(num)
})() //自调用函数
}
closure()
// 1
<script/>
为什么采用这个采用子调用,因为内部函数没有调用只做返回值的时候,一开始的时候调用父级函数是无法进入到子级函数的
var num = 0;
function closure() {
var num = 1;
console.log('外部函数:',num)
return function () {
console.log("内部函数:",num)
}
}
closure()
// 外部函数: 1
closure()()
// 内部函数: 1
先简单的分享一下闭包