【问题标题】:JavaScript closures surprising [duplicate]JavaScript 闭包令人惊讶 [重复]
【发布时间】:2021-09-28 15:30:02
【问题描述】:
var a = [];
var b = ['abc','def'];
for(var c of b) {
  var c_ = c.slice();
  a.push(function(){alert(c_)});
}

a[0]();
a[1]();

结果是看到消息“def”两次。这完全出乎意料。我如何在 JavaScript 中做到这一点?如果是alert(c),我可以理解,但c_ 显然是c 的副本,并且适用于其他语言的标准。

【问题讨论】:

    标签: javascript closures


    【解决方案1】:

    var 始终是函数作用域。 let 是块作用域!

    【讨论】:

      猜你喜欢
      • 2014-02-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-20
      • 2019-10-05
      • 2018-01-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多