JS闭包的几种常见形式实例详解
作用域链:
//作用域链
vara=1;
functiontest(){
varb=2;
returna;
}
alert(test());//弹出1;
alert(b);//不能获取b
//scopechain
vara=1;
functiontest(){
varb=2;
functiontest1(){
varc=3;
alert(a);
alert(b);
alert(c);
}
test1();
}
test();//弹出1,弹出2,弹出3;
词法作用域:
//词法作用域;
functionf1(){
vara=12;
returnf2();
}
functionf2(){
returna;
}
alert(f1());//并不能获取a,a在f2()中并未定义;
functionf1(){
vara=1;
returnf2();
}
functionf2(){
varb=3;
alert(b);
returna;
}
alert(f1());//弹出3,a在f2()中未定义
functionf1(){
vara=1;
returnf2();
}
functionf2(){
varb=3;
alert(b);
returna;
}
alert(f1());//弹出3,a在f2()中未定义,undefined
vara=55;
alert(f1());//弹出3,弹出55
如何通过闭包突破全局作用域链——几种常见形式
//通过闭包突破全局作用域链
functionf(){
vara="sun";
returnfunction(){
returna;
}
}
vartest=f();
alert(test());//弹出sun
varn;
functionf(){
vara="sun";
n=function(){
returna;
}
}
f();
alert(n());//弹出sun
functionf(param){
varn=function(){
returnparam;
};
param++;
returnn;
}
vartest=f(45);
alert(test());//弹出46;
总结
以上所述是小编给大家介绍的JS闭包的几种常见形式,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!