JavaScript Functions that return function
This question already has an answer here:
Let's decompose the statements in its constituents:
var xx =(function(){var e = 0; return function(){return e++}})();
var e = 0;
assign 0 to e
return function(){return e++;}
return a function f which:
2.1 return the value of e
2.2 increment e by 1
var xx = function(){var e = 0; return function(){return e++}})();
assign to xx the function f(){ return e++}
with scope [e=0]
xx();
Exec the function f:
4.1 return the value of e // 0
4.2 increment e by one // e = 1
4.3 xx
is now the function f(){ return e++;
} with scope [e=1]
So, xx
is the function which return the internal value of e
(starting from 0 ) and increment e
by one.
IF you call xx();
another time, you'll get:
xx(); // returns 1
xx = f(){ return e++;}[e=2] // returns 2 and increment e by one
yes, it is returning function, and every time you execute this function xx(); it will return an incremented value
alert( xx() );
//will alert 0
alert( xx() );
//will alert 1
alert( xx() );
//will alert 2
Hope this answers the question
In JavaScript, functions are first-class objects; that is, they can be passed around and assigned to variables like anything else. So in your case xx
is simply a reference to the inner function which can be called, passed around further etc.
One benefit of doing so means you can implement private variables like in your example. By defining e
inside the outer function, and referencing it inside the inner function, the inner function retains that reference to e
even after it is returned. This allows you to call
xx();
xx();
xx();
which will increment and return the value of e
each time. You can't override this variable since there's no public reference to it.
下一篇: JavaScript函数返回函数