让循环内外使用相同

时间:2018-05-24 07:21:23

标签: javascript var let

当我在这篇文章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明确地限定在for循环中,但是示例1我不太确定。

3 个答案:

答案 0 :(得分: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);

答案 1 :(得分:1)

不,范围明智他们不一样。

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

答案 2 :(得分:-2)

Here是一篇解释var,let和const。

之间区别的文章

我很好地概述了JS如何在幕后处理变量。

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