<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<script type="text/javascript">
/*
理解:什么是闭包?
1.密闭的容器, 类似于set,map容器
2.闭包是一个对象,存放数据的格式:key:value
形成的条件:
1.函数嵌套
2.内部函数引用外部函数的局部变量
闭包的优点:
延长外部函数局部变量的生命周期
闭包的缺点:
容易造成内存泄露
注意点:
1.合理的使用闭包
2.用完闭包要及时清除(销毁)
*/
// 简单的闭包
function fun(){
let a=1;
function b(){
console.log(a);
}
b();
}
fun();
// Global 全局的变量对象
// Local 函数里面局部的变量对象
//闭包的应用场景
function fun(){
let count=1;
return function(){
count++;
console.log(count);
}
}
var fun2=fun();
fun2(); //2
fun2(); //3
/*
说说它们的输出情况
*/
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) //underfined,0,0,0
var b=fun(0).fun(1).fun(2).fun(3)// underfined,0,1,2
var c=fun(0).fun(1)
c.fun(2)
c.fun(3)// underfined,1,1
</script>
</body>
</html>
闭包 下面五段代码分别输出什么?
for( var i=0; i<5;i++){
console.log(i)
}
//0,1,2,3,4
for(var i=0;i<5;i++){
setTimeout(function(){
console.log(i)
},1000*i);
}
// 15 5,5,5,5,5
for(var i=0;i<5;i++){
(function(i){
setTimeout(funciton(){
console.log(i)
},i*1000);
})(i);
}
for(var i=0;i<5;i++){
(function(){
setTimeout(function(){
console.log(i);
},i*1000);
})(i);
}
//underfind 5,5,5,5,5
for( var i=0; i<5; i++){
setTimeout((function(i){
console.log(i)
})(i),i*1000)
}
//0 ,1,2,3,4,0