/*****什么是闭包*****/ //===使用局部变量实现全局变量的功能的方法叫闭包===// /*全局变量*/ var n=0; function counter2(){ return ++n; } console.log(counter2());//1 console.log(counter2());//2 console.log(counter2());//3 console.log(counter2());//4 /*局部变量*/ function counter1(){ var n=0; return ++n; } console.log(counter1());//1 console.log(counter1());//1 console.log(counter1());//1 console.log(counter1());//1 /*闭包*/ function outer(){ var n=0;//受保护变量 //每调用一次,获得一个从1开始,连续不重复的序号 function counter3(){ return ++n; } return counter3; } var ICBCcounter=outer(); console.log(ICBCcounter());//1 console.log(ICBCcounter());//2 n=100; //对闭包没影响 console.log(ICBCcounter());//3 console.log(ICBCcounter());//4
闭包的3特点: 1. 外层函数包裹受保护的变量和内层函数——函数嵌套 2. 内层函数专门负责操作外层函数保护的局部变量 3. 将内层函数返回到外层函数外部,反复调用 闭包扩展特点: 1. 外层函数调用了几次,就有几个受保护的局部变量副本 2. 同一次外层函数调用返回的多个内层函数,共用同一个局部变量。