闭包是就是父函数中有子函数,子函数可以访问父函数的变量,父函数的变量的又是这子函数的一部分。
调用父函数,返回的是带有父函数内变量的子函数,直接上例子
<script> function parent() { var num = 0;//内部变量 return function children(x) {//返回子函数 var num2 = 0 num2++//内部函数自有变量 num++;//内部函数有引用,作为add函数的一部分了 console.log('num='+num); console.log('num2='+num2); if(x==0){num=null}//传入参数清空变量 }; } var func1 = parent();//返回子函数 func1();//执行的是子函数,um = 1,num2=1 func1();//执行子函数,num是父函数内定义的变量也就是引用变量,在第一次调用后,num变成了1,所以,num = 2,num2=1 //这个应用型变量很关键,也就是说num这个变量一直是存在的,如果应用不当会增加内存消耗 var func2 = parent(); func2(0);// num = 1,num2=1 func2();// num = 1,num2=1 console.log(func1===func2)//输出false,说明返回的是两个不同的函数 </script>