2620. 计数器

58 阅读1分钟

给定一个整型参数 n,请你编写并返回一个 counter ****函数。这个 counter ****函数最初返回 n,每次调用它时会返回前一个值加 1 的值 ( n ,  n + 1 ,  n + 2 ,等等)。

/**
 * @param {number} n
 * @return {Function} counter
 */
var createCounter = function(n) {
    let count =n
    return function() {
let result =count
count+=1
return result
    };
};

/** 
 * const counter = createCounter(10)
 * counter() // 10
 * counter() // 11
 * counter() // 12
 */
  1. 当调用 createCounter(10) 时,createCounter 函数会被执行,此时创建了一个局部变量 count 并将其初始化为 10。
  2. createCounter 函数返回了一个匿名函数,这个匿名函数“记住”了对 count 变量的引用。虽然 createCounter 函数已经执行完毕,但由于返回的匿名函数保持了对 count 的引用,所以 count 变量并未被垃圾回收机制清除,而是一直存在于内存中。
  3. 将返回的匿名函数赋值给 counter,这时 counter 变成了一个拥有闭包特性的函数对象,它可以访问并修改 count 变量的值,尽管 createCounter 已经执行结束。
  4. 每次调用 counter() 函数时,它都会使用闭包所保留的 count 变量的最新值,并对其进行递增,然后返回递增前的值。因此,每次调用都会得到一个递增的计数值。