【问题标题】:Stale closures issues in JavaScriptJavaScript 中的过时闭包问题
【发布时间】:2021-07-01 04:06:47
【问题描述】:

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

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 吗? setValue 正文中会发生什么以某种方式更新 value 中的值?

谢谢!

【问题讨论】:

  • "以某种方式更新 value 中的值" 不,vsetValue 中更新。

标签: javascript closures


【解决方案1】:

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

  • v 已关闭。
  • setValue 更改 v
  • value 读作 v

【讨论】:

  • 所以可以肯定地说只关闭更新的变量吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-17
  • 2013-12-16
  • 1970-01-01
相关资源
最近更新 更多