//普通代码var a =5;functionfn(){
a++;w
return a;}
console.log(fn())//6
console.log(fn())//7
console.log(fn())//8
console.log(fn())//9//闭包代码let add =(function(){
var a =5;returnfunction(){
a++;return a;}})()
console.log(add())//6
console.log(add())//7
console.log(add())//8
console.log(add())//9
闭包的基本代码
functionfn1(){
var n =100;// 下面这句话是定义函数,而不是调用letfn2=function(){
console.log("fn2", n);}return fn2;//把fn2返回出去。}//1// let f = fn1();//f(); //----- fn2 100//2fn1()();//1=2
闭包中修改局部变量-1
functionfn1(){
var n =100;//在内存中申请空间,名字n,值是100;// 下面这段代码是定义函数,不是调用letfn2=function(){
//在内存中申请空间,名字fn2,值是函数
n++;
console.log("fn2",n);}return fn2;}let f =fn1();f();//101f();//102f();//103
闭包中修改局部变量-2
functionfn1(){
var n =100;//在内存中申请空间,名字n,值是100;// 下面这段代码是定义函数,不是调用letfn2=function(){
//在内存中申请空间,名字fn2,值是函数
n++;
console.log("fn2",n);}return fn2;}fn1()();//101fn1()();//101
两个子函数
functionfn1(){
var n =100;//在内存中申请空间,名字n,值是100;// 下面这段代码是定义函数,不是调用letfn2=function(){
//在内存中申请空间,名字fn2,值是函数
n++;
console.log("fn2",n);}letfn3=function(){
//在内存中申请空间,名字fn2,值是函数
n++;
console.log("fn2",n);}return[fn2,fn3];}let arr =fn1();
arr[0]();//fn2
arr[1]();//fn3