以下内容太过暴力,请成年人在未成年人的陪同下观看!!!转载一定要注明本文出处:啊哒木木。
闭包的定义一般有两种:1认为闭包是符合一定条件的函数;2认为闭包是函数及其相关环境组合而成的实体,,即创建一个能显式表示引用环境的东西,并将它与相关的子程序捆绑在一起,这样捆绑起来的整体称为闭包。个人倾向于第二种定义。
示例代码:
var a=20000;
function b(num){
var a=num;
var x=100;
function c(){
console.log(a++);
}
return c;
}
g =b(5);
g(); //5
g(); //6
g =b(5);
g();//5
g =b(12);
g(); //12
d =b(5);
g(); //13
d(); //5
console.log(a); //20000
我们看代码,第11行和第12行的输出我们可以看出,形成闭包后,再往b函数内传形参已经不好使了。
第10行、第13行和第15行,我们可以看出,重新声明g,之前的闭包销毁,建立新的闭包。
第16、17、18行,我们可以看出,建立了两个闭包,互不影响。
第20行,告诉我们,只有通过闭包才能访问到函数的内部变量,直接访问不到,除非闭包提供一个return,类似于接口