编写计数器

91 阅读1分钟

请你编写并返回一个 计数器 函数,它接收一个整型参数 n 。这个 计数器 函数最初返回 n,每次调用它时返回前一个值加 1 的值 ( n ,  n + 1 ,  n + 2 ,等等)。最多对 counter() 进行 1000 次调用

function counter(n) {
    let count = n
    return function () {
        if(count > 1000) {
        throw Error("请求次数不能大于1000!")
        }
        return count++
    }
}

const myCounter = counter(1)

console.log(myCounter())
console.log(myCounter())
console.log(myCounter())

考察的知识点:闭包

什么是闭包:

  • 闭包就是能够访问其他函数内部变量的函数
  • 闭包的作用就是保存自己私有的变量,通过提供的接口给外部使用,但外部不能直接访问该变量
  • 优点:隐藏变量以及防止变量被篡改和作用域污染,从而实现封装
  • 缺点:函数执行完后,函数内的局部变量没有释放,占用内存时间变长,容易造成内存泄漏

如何防止闭包造成内存泄漏

  1. 及时解除引用
  2. 避免循环引用
  3. 使用立即执行函数:有些时候,我们只需要闭包函数的返回值,而不需要保留对函数本身的引用。这时可以使用立即执行函数来创建闭包函数,使其在执行完后立即释放
  4. 将数据存储在局部变量中:如果需要长期保存的数据较大,可以将其存储在局部变量或其他适当的数据结构中,避免在闭包函数中直接引用