Js基础-闭包解决数据缓存

40 阅读1分钟

问题描述


let count = 0;

function add(num) {
    count += num;
    return count
}

console.log("0:", add(0))
console.log("1:", add(2))
每次累加,count的值都没有重置为初始值

解决方案

function add(initCount) {
  let count = initCount;
  return (num) => {
      count += num;
      return count;
  }
}

console.log("0:", '---', add(0)(0)) // 1
console.log("1:", '---', add(0)(2)) // 3
利用闭包特性,维护自己作用域内的变量,不会造成变量污染
问题是,闭包内的变量不会被垃圾回收
因为闭包是上级作用域中的子函数,可访问上级作用域中的变量,上级函数执行完,作用域并未销毁,这时作用域中的值也不会被销毁,那作为上级作用域中的子函数的闭包,就不会被清除了。