思路:闭包。closure函数返回一个复杂数据类型即函数,并且所返回函数内部使用外部计数变量count,这样count就会持久化在内存中而不会被销毁。每次调用closure()就会创建不同的闭包函数实例,但是每个闭包函数都有自己的内部变量count,这些闭包函数的内部变量是独立的,故其分别独立计数。

<script type="text/javascript">
  const closure = () => {
     let count=0
     return function(){
        count++
        return count
     }
  }
  const counter1 = closure();
  const counter2 = closure();

  console.log(counter1()); // 1
  console.log(counter1()); // 2

  console.log(counter2()); // 1
  console.log(counter2()); // 2
</script>

总结:每次调用闭包函数会创建不同的闭包函数实例,但是每个闭包函数都有自己的内部变量,并且这些闭包函数的内部变量是独立的,其各自互不影响。