什么是闭包?
-
密闭的容器,类似于set、map容器,用于存储数据
-
闭包是一个对象,存放数据的格式为: key :value
形成的条件
- 函数的嵌套
- 内部函数调用外部函数的局部变量
闭包的优点
- 延长外部函数局部变量的的声明周期
闭包的缺点
- 容易造成内存泄漏
注意点
- 合理使用闭包
- 使用完闭包及时清除(销毁)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>闭包</title>
</head>
<body>
<script>
function fun(n,o){
console.log(o);
return {
fun:function(m){
return fun(m,n);
}
}
}
var a = fun(0);
a.fun(1);
a.fun(2);
a.fun(3);
/*
var a = fun(0);
o未定义输出undefined
a.fun(1);
a.fun(1) => fun(1,0) 输出 0
a.fun(2);
a.fun(2) => fun(2,0) 输出 0
a.fun(3);
a.fun(3) => fun(3,0) 输出 0
*/
var b = fun(0).fun(1).fun(2).fun(3)
/*
var b = fun(0).fun(1).fun(2).fun(3)
第一次调用fun(0),参数o未定义输出undefined
fun(0).fun(1) => var a = fun(0) a.fun(1) 输出 0
fun(0).fun(1).fun(2) => var a = fun(1,0) a.fun(2) 输出 1
fun(0).fun(1).fun(2).fun(3) => var a = fun(2,1) a.fun(3) 输出 2
*/
var c = fun(0).fun(1)
c.fun(2)
c.fun(3)
/*
var c = fun(0).fun(1)
fun(0).fun(1) => var a = fun(0) a.fun(1) 输出 0
c.fun(2)
c.fun(2) =>fun(2,1) 输出 1
c.fun(3)
c.fun(3) =>fun(3,1) 输出 1
*/
</script>
</body>
</html>