我在JS上解决了一个难题,我找到了这个代码:
var xx = (function () {
var e = 0;
return function () { return e++ }
})();
有人问到xx的价值是什么。
我已经搜索了返回函数的函数,但找不到任何有用的函数,我对返回函数的函数并不熟悉。请帮忙。
答案 0 :(得分:3)
是的,它是返回函数,每次执行这个函数xx();它将返回递增的值
alert( xx() );
//将提醒0
alert( xx() );
//将提醒1
alert( xx() );
//将提醒2
希望这能回答这个问题
答案 1 :(得分:3)
在JavaScript中,函数是第一类对象;也就是说,它们可以传递并像其他任何东西一样分配给变量。所以在你的情况下,xx
只是对内部函数的引用,可以调用,进一步传递等。
这样做的一个好处意味着您可以像示例中那样实现私有变量。通过在外部函数中定义e
并在内部函数内部引用它,内部函数即使在返回后仍保留对e
的引用。这允许你打电话
xx();
xx();
xx();
每次都会递增并返回e
的值。您无法覆盖此变量,因为没有公开引用它。
答案 2 :(得分:1)
让我们分解其成分中的陈述:
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++}
[e=0]
分配给xx
xx();
执行函数f:
4.1 返回e // 0
的值4.2 将e增加一个 // 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