JS中闭包的详解
先来看一道题了解一下闭包的运行流程。
第一道题
var a=9;
function fn(){
a=0;
return function(b){
return b+a++;
}
}
var f=fn();
console.log(f(5));
console.log(fn()(5));
console.log(f(5));
console.log(a);
先来画图分析
第二道题
function fn(i){
return function(n){
console.log(n+(--i));
}
}
var f=fn(2);
fn(4)(5);
fn(6)(7);
f(8);
f(3);
总结一下
1,函数套函数
2,全局变量的值,和函数内部的变量值使用后是不会被销毁的。
3,可以读取父函数内部的变量,例如:地址二里能读取到地址一函数的变量
还有一些闭包的注意
1,因为变量不会被销毁,所以对内存的消耗很大,会使网页性能变差,还有可能内存溢出,所以不能乱用闭包。
2,还有,因为可以读取父函数的值并且改变他,当你把父函数当成一个对象,把闭包当成原型(公用)方法(prototype),内部变量当成私有属性时,一定要小心不要随便改变内部变量的值