【问题标题】:Is let the same used inside and outside a loop [duplicate]是否让相同的内部和外部循环使用[重复]
【发布时间】:2018-05-24 07:21:23
【问题描述】:

当我阅读这篇文章https://stackoverflow.com/a/111111/6359753中的示例6时,我的脑海中突然出现了这个问题

会不会有区别

// Example 1
let i;
var arr = [1,2,3]
for (i=0; i<arr.length; i++){
 // do stuff
}

// Example 2
var arr = [1,2,3]
for (let i=0; i<arr.length; i++){
 // do stuff
}

如果它们相同,为什么它们相同?

换句话说,我不太了解let 的范围。如果在循环之外声明,它们是否在循环之外?示例 2 的 let 显然是在 for 循环内限定的,但示例 1 我不太确定。

【问题讨论】:

  • let 用于分配变量 temp,它们仅在该范围内工作。例如。如果你在 for 循环中使用 let i=0,它只在该循环内有效。

标签: javascript var let


【解决方案1】:

如果它在for 循环中声明,则它仅在循环体中可见。循环外i 不可见。

var arr = [1,2,3];

for (let i=0; i<arr.length; i++) {
 
}

console.log(i);

如果在for循环之外声明,则变量的作用域是最近的包围块{}

let i;
var arr = [1,2,3];

for (i = 0; i < arr.length; i++) {

}

console.log(i);

【讨论】:

  • stackoverflow.com/a/111111/6359753这篇帖子的示例6中,它显示了可能发生意外事情的极端情况,所以我想知道我列出的2个示例是否等效
  • 在那个答案中,var 关键字用于声明变量。 letvar 不同,工作方式也不同
  • “最近包围的块{}”是什么意思,是指for循环块之外的块吗?
  • @HenryYang 一般是的
【解决方案2】:

不,在范围方面它们是不一样的。

在第一个示例中,变量i 是全局变量,可以在整个程序中访问。但在第二个示例中,i 的范围仅限于 for 循环,因此无法从 for 循环外部访问 i

【讨论】:

    【解决方案3】:

    Here 是一篇解释 var、let 和 const 区别的文章。

    我对 JS 如何在后台处理变量进行了很好的概述。

    它解释了变量的提升、范围(这是你的问题)以及在使用 let 和 const 时如何避免一些陷阱。

    【讨论】:

    猜你喜欢
    • 2021-12-08
    • 2014-08-30
    • 2014-09-13
    • 2013-06-07
    • 1970-01-01
    • 2020-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多