// 1、外部函数内部嵌套内部函数 functionfn1(){var a ="Hello!";functionfn2(){// 2、内部函数中使用外部函数的环境
console.log(a);}// 3、外部函数返回内部函数return fn2;}var f =fn1();
console.log(f);//闭包中的函数f();//"Hello!"functiontest(){var num =1;
num++;
console.log(num);}test();//2test();//2test();//2
console.log("====================");// 1、外部函数内部嵌套内部函数 functionoutFn(){var num =1;functioninFn(){// 2、内部函数中使用外部函数的环境
num++;
console.log(num);}// 3、外部函数返回内部函数return inFn;}var inF =outFn();inF();//2inF();//3inF();//4inF();//5var inF1 =outFn();inF();//6
闭包的作用
1. 获取函数内部的变量
2. 保持变量的值在内存中
3. 避免变量名重复
// 定义外部函数,设置形参(水壶的容量)functionwaterFlower(total){// 定义内部函数,执行浇水过程 (每次浇水,水容量减50ml)functionwater(flower){// 当水容量大于50ml则浇水if(total >=50){// 每次浇水减50
total = total -50;}else{// 如果没水,则自动加水
document.write("<h4>正在重新装水....</h4>");
total =200;// 浇水
total = total -50;// }
document.write("给"+flower+"浇水50ml,剩余"+ total +"ml的水!<br>");}// 返回内部函数return water;}// 装水var t =waterFlower(200);// 浇水t("桃花");//给桃花浇水50ml,剩余150ml的水!t("兰花");//给兰花浇水50ml,剩余100ml的水!t("玫瑰花");//给玫瑰花花浇水50ml,剩余50ml的水!t("菊花");//给菊花花浇水50ml,剩余0ml的水!t("桂花");//正在重新装水// //给桂花浇水50ml,剩余150ml的水!