要理解闭包,首先理解javascript特殊的变量作用域,变量的作用域无非就是两种: 全局变量
局部变量
javascript语言的特殊处就是函数内部可以读取全局变量。
1.如何从外部读取局部变量
我们有时候需要得到函数内的局部变量,但是在正常情况下,这是不能读取到的,只有通过变通方法才能读取到。
在javascript语言中,只有函数内部的子函数才能读取局部变量,因此可以把闭包简单理解成“定义在一个函数内部的函数”。所以本质上,闭包就是将函数内部和函数外部连接起来的一座桥梁。
2.闭包的概念
闭包是指有权访问另一个函数作用域中变量的函数,创建闭包的最常见的方式就是在一个函数内创建另一个函数,通过另一个函数访问这个函数的局部变量,利用闭包可以突破作用链域,将函数内部的变量和方法传递到外部。
3.闭包的特性
1).函数嵌套函数
2).内部函数可以引用外层的参数和变量
3).参数和变量不会被垃圾回收机制回收
4.闭包的用途
1).闭包可以读取函数内部的变量
2).可以让变量的值始终保持在内存中,生命周期比较长
5.闭包的缺点
闭包不能滥用,否则会导致内存泄露,影响网页的性能。闭包使用完了后,要立即释放资源,将引用变量指向null。
举个小例子大家看一下
<script>
function demo() {
var a = 1;
return function(b) {
return (a++) + b;
}
}
var b = demo()(1);
console.log(b);
</script>
上述例子中:demo函数中的变量a,在下面匿名函数中是可以读取的,所以console.log(b),打印出来的值是2。