我正在解决一个关于 JS 的难题,我发现了这段代码:
var xx = (function () {
var e = 0;
return function () { return e++ }
})();
有人问xx的值是多少。
我用谷歌搜索了返回函数的函数,但找不到任何有用的东西,我对返回函数的函数不太熟悉。请帮忙。
我正在解决一个关于 JS 的难题,我发现了这段代码:
var xx = (function () {
var e = 0;
return function () { return e++ }
})();
有人问xx的值是多少。
我用谷歌搜索了返回函数的函数,但找不到任何有用的东西,我对返回函数的函数不太熟悉。请帮忙。
是的,它是返回函数,每次你执行这个函数 xx(); 它将返回一个递增的值
alert( xx() );
//将警报0
alert( xx() );
//将提醒 1
alert( xx() );
//将提醒2
希望这能回答问题
在 JavaScript 中,函数是一等对象;也就是说,它们可以像其他任何东西一样被传递并分配给变量。因此,在您的情况下xx
,只是对内部函数的引用,可以调用,进一步传递等。
这样做的一个好处是您可以像示例中那样实现私有变量。通过e
在外部函数内部定义,并在内部函数内部引用它,内部函数e
即使在返回之后也会保留该引用。这允许您调用
xx();
xx();
xx();
这将增加并返回e
每次的值。你不能覆盖这个变量,因为它没有公共引用。
让我们分解其成分中的语句:
var xx =(function(){var e = 0; return function(){return e++}})();
var e = 0;
将 0 分配给 e
return function(){return e++;}
返回一个函数f:
2.1返回e的值
2.2将 e 加 1
var xx = function(){var e = 0; return function(){return e++}})();
f(){ return e++}
将具有作用域的函数分配给 xx[e=0]
xx();
执行函数 f:
4.1返回e的值// 0
4.2 e 加一// e = 1
4.3xx
现在是f(){ return e++;
具有作用域的函数 }[e=1]
因此,xx
是返回e
(从0开始)的内部值并加e
一的函数。
如果你再打电话xx();
,你会得到:
xx(); // returns 1
xx = f(){ return e++;}[e=2] // returns 2 and increment e by one