为什么这个函数返回一个函数?

时间:2018-06-05 23:13:19

标签: javascript

为什么我要将计数器功能分配给计数变量?目的是什么?



function counter() {
  var localVar = 0;
  return function() {
    localVar++;
    return localVar;
  }
}

  var count = counter(); // I am confused here.

  console.log(count());




4 个答案:

答案 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,这样您就可以保持多个实例保持独立的跟踪。

见下面的例子:

&#13;
&#13;
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;
&#13;
&#13;

答案 3 :(得分:0)

函数counter是一个函数工厂,它是一个返回一个新函数的函数 - 在这种情况下,它是一个递增值的函数。

然后将此新函数分配给变量count

此模式的用处是函数可以访问其本地scope。因此,该函数可以访问和增加其范围中的变量localVar - 这也是在调用counter时声明的 - 并且没有外部函数可以修改它,因此不存在多个函数更改的冲突相同的变量。此外,通过这种方式,您可以拥有多个不会相互冲突的counters