- function out() {
- var a = 1;
- return function(a){//使用匿名函数实现局部变量驻留内存中,从而实现累加
- return a++;
- };
- }
- var fun = out();
- fun();// 1 执行后 ++a,,然后a还在~
- fun();// 2
- fun = null;//a被回收
在如上的例子中,我们会发现,一个函数套用了一个函数,所以我们有时候会看到如下的调用方法 fun()();
如果以上面的代码为例,那么
- var fun=out();
- console.log(fun); //输出function(){return a++; }; 说明out()=被返回的函数
- var fun=out()();
- console.log(fun); //输出1,说明out()()=最内部被返回的值
这是因为函数内另一个函数也是作为返回的值而存在,所以我们可以直接通过这样的方法来调用内部返回函数,那么如果是var fun=out()(2);那么返回值是什么呢,如果在全局里定义一个var a=3;
是不感觉到迷惑了,其实这里有个小技巧,当一个变量被返回之后,会被返回给离他最近的一个相同名称的变量. 这句话是我总结的,如果不对,还请指出
是不感觉到迷惑了,其实这里有个小技巧,当一个变量被返回之后,会被返回给离他最近的一个相同名称的变量. 这句话是我总结的,如果不对,还请指出
私有成员
- var out = (function(){ //使用匿名函数
- var a = 1; //定义私有变量
- function fir(){ //私有函数
- return a++;
- }
- function sec(){
- return a++;
- }
- return {
- a:fir, //使用json结构来储存函数并返回
- b:sec
- }
- })();
- out.b(); //2
- out.c() //3