【问题标题】:Javascript Var and Let Usage [duplicate]Javascript Var和Let用法[重复]
【发布时间】:2020-09-29 12:31:54
【问题描述】:
 const array = [1, 2, 3, 4];
 for (var index = 0; index < array.length; index++) {
  setTimeout(() => {
    console.log("I am at index " + index);
  });
}

当我在 for 循环中使用“var”关键字时,我得到了输出

I am at index 4
I am at index 4
I am at index 4
I am at index 4

但是当我在 for 循环中使用“let”关键字时,

 const array = [1, 2, 3, 4];
 for (let index = 0; index < array.length; index++) {
  setTimeout(() => {
    console.log("I am at index " + index);
  });
}

I am at index 0
I am at index 1 
I am at index 2
I am at index 3

谁能告诉我这里发生了什么?

【问题讨论】:

标签: javascript arrays var let


【解决方案1】:

你的问题的答案需要你理解

var 类型变量具有function/script 范围,由于hoisting,它的声明将向上移出for循环,因此它将进入global scope,并且在每次迭代中,它都会发生变化并且所有三个闭包都将共享全局词法范围内的单个变量i,而如果我们将var 替换为let,那么它将不会移出for 循环作为block-scoped,每次迭代都是一个新块并且三个超时回调将有三个不同的词法范围和一个共享的全局范围(我们的代码中没有任何内容)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-05
    • 2018-06-08
    • 2016-09-04
    • 1970-01-01
    • 2014-11-16
    • 2016-07-01
    • 2020-06-02
    • 2018-05-14
    相关资源
    最近更新 更多