为什么我要将计数器功能分配给计数变量?目的是什么?
function counter() {
var localVar = 0;
return function() {
localVar++;
return localVar;
}
}
var count = counter(); // I am confused here.
console.log(count());

答案 0 :(得分:4)
counter
是一个函数工厂,它在调用时返回一个函数。
通过将变量分配给counter
,您可以跟踪此计数器,并且每次调用它时变量localVar
将增加1,如果您总是调用counter()()
你无法跟踪这个价值。
示例:
function counter() {
var localVar = 0;
return function() {
localVar++;
return localVar;
}
}
var count = counter();
for(var i = 0; i<99; i++) count();
console.log(count()); // 100
for(var i = 0; i<99; i++) counter()();
console.log(counter()()); // 1
答案 1 :(得分:1)
您没有将$ cat results/sample_2_p1_1_p2_a.csv [19:12:36]
P1: 1, P2: a
函数分配给变量,您正在调用counter
并将其返回的内容分配给变量。
只是counter
返回另一个功能。
请注意counter
内的位:
counter
从字面上可以理解为&#34;返回一个递增局部变量的函数,然后返回该变量的当前状态&#34;。
答案 2 :(得分:0)
原因是您可以在分配给它的任何变量上使用counter
,这样您就可以保持多个实例保持独立的跟踪。
见下面的例子:
function counter() {
var localVar = 0;
return function() {
localVar++;
return localVar;
}
}
var count = counter();
var secCount = counter();
console.log(`count: ${count()}`);
console.log(`count: ${count()}`);
console.log(`secCount: ${secCount()}`);
console.log(`secCount: ${secCount()}`);
console.log(`count: ${count()}`);
console.log(`count: ${count()}`);
console.log(`secCount: ${secCount()}`);
console.log(`secCount: ${secCount()}`);
console.log(`count: ${count()}`);
&#13;
答案 3 :(得分:0)
函数counter
是一个函数工厂,它是一个返回一个新函数的函数 - 在这种情况下,它是一个递增值的函数。
然后将此新函数分配给变量count
。
此模式的用处是函数可以访问其本地scope。因此,该函数可以访问和增加其范围中的变量localVar
- 这也是在调用counter
时声明的 - 并且没有外部函数可以修改它,因此不存在多个函数更改的冲突相同的变量。此外,通过这种方式,您可以拥有多个不会相互冲突的counters
。