首页 > 解决方案 > JavaScript 中的过时闭包问题

问题描述

我正在重新审视关闭,我偶然发现了以下问题,我无法真正理解,有人可以帮我解决以下问题吗?

function Inc(){
  let v = 0
  let p = v
  
  function value() {
    console.log('p',p)
    console.log('v', v)
  }
  
  function setValue() {  
    v += 1;
    console.log(v)
  }
  
  return [value, setValue]
}

let [value, setValue] = Inc()

value() // p 0 , v 0
setValue() 
value() // p 0, v1

根据我的理解,闭包关闭了它们创建的原始值。在这种情况下,v 的值不应该也是 0 吗?在 body 中发生了什么setValue以某种方式更新了 in 的值value

谢谢!

标签: javascriptclosures

解决方案


闭包关闭变量,而不是值。

  • v关闭了。
  • setValue变化v
  • value读取v

推荐阅读