JavaScript函数返回函数
这个问题在这里已经有了答案:
让我们分解其成分中的陈述:
var xx =(function(){var e = 0; return function(){return e++}})();
var e = 0;
给e赋0
return function(){return e++;}
返回一个函数f ,其中:
2.1返回e的值
2.2将e增加1
var xx = function(){var e = 0; return function(){return e++}})();
用范围[e=0]
赋给xx函数f(){ return e++}
xx();
执行函数f:
4.1返回e // 0的值
4.2将e递增1 // e = 1
4.3 xx
现在是函数f(){ return e++;
}范围[e=1]
所以, xx
是返回e
的内部值(从0开始)并将e
递增1的函数。
如果你调用xx();
另一次,你会得到:
xx(); // returns 1
xx = f(){ return e++;}[e=2] // returns 2 and increment e by one
是的,它是返回函数,并且每次你执行这个函数xx(); 它会返回一个递增的值
alert( xx() );
//将提醒0
alert( xx() );
//会提醒1
alert( xx() );
//会提醒2
希望这回答这个问题
在JavaScript中,函数是一流的对象; 也就是说,它们可以被传递并分配给其他任何变量。 所以在你的情况下, xx
只是对内部函数的引用,它可以被调用,进一步传递等等。
这样做的一个好处是你可以像你的例子那样实现私有变量。 通过在外部函数中定义e
,并在内部函数内引用它,内部函数即使在返回后仍保留对e
引用。 这可以让你打电话
xx();
xx();
xx();
这会每次递增并返回e
的值。 由于没有公开引用,因此无法覆盖此变量。