<h2>概念:</h2>
如果一个函数访问了它的外部变量,那么它就是一个闭包。
<h2>优点:</h2>
1.足够灵活;
2.实现了函数的封装;
<h2>举栗子:</h2>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<script>
function test1() {
var i = 100;
return function () {
console.log(i)
}
}
var put = test1();
put();
</script>
</body>
</html>
运行结果:
<h4>代码分析:</h4>
在test1中用 var 定义了 i 属于局部变量,如果在函数外直接调用会报错:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<script>
function test1() {
var i = 100;
// return function () {
// console.log(i)
// }
}
var put = test1();
put();
</script>
</body>
</html>
运行结果:
但是,在内部再加了函数输出 i ,调用后就可以通过函数调用成功返回 i 的值,这就是闭包的基本用法。
<h2>警告!</h2>
在使用闭包的时候因为不确定什么时候再次调用闭包所以调用一次完成之后它是不会用垃圾回收机制收回已经声明的变量,会造成<strong>空间浪费以及内存泄露、性能消耗</strong>等问题。所以使用闭包的时候需要慎重。