据大家所知
for (let i = 0; i < 2; i++) {
console.log(i);
for (i = 0; i < 8; i++) {
console.log('>'+i);
}
}
结果是
0
>0
>1
>2
>3
>4
>5
>6
>7
而
for (let i = 0; i < 2; i++) {
console.log(i);
for (let i = 0; i < 8; i++) {
console.log('>'+i);
}
}
结果是
0
>0
>1
>2
>3
>4
>5
>6
>7
1
>0
>1
>2
>3
>4
>5
>6
>7
而
第二个 for 的 let 发生了什么😉
1
rabbbit 2020-02-03 17:39:47 +08:00
把 for 后面那个括号当成是个作用域
第一个 let i = 0; while(i < 2) { ....console.log(i); ....{ ........i = 0; // 注意这里 ........while(i < 8) { ............console.log('>'+ i) ............i++ ........} ....} ....i++ } 第二个 let i = 0; while(i < 2) { ....console.log(i); ....{ ........let i = 0; ........while(i < 8) { ............console.log('>'+ i) ............i++ ........} ....} ....i++ } |
2
optional 2020-02-03 17:42:17 +08:00
let 是块级作用域。 第二个发生了变量覆盖。
|
3
royzxq 2020-02-04 15:07:42 +08:00
|
4
Pichai 2020-02-06 14:52:47 +08:00
```
for (let i = 0; i < 2; i++) { console.log(i); for (i = 0; i < 8; i++) { 此处没有使用关键字进行变量声明,i 就是全局作用域 console.log('>'+i); } } 代码相当于: var i; // i 提升到所有代码最上方 for (let i = 0; i < 2; i++) { console.log(i); for (i = 0; i < 8; i++) { console.log('>'+i); } } for (let i = 0; i < 2; i++) { console.log(i); for (var i = 0; i < 8; i++) { //此处使用 var 进行变量声明,i 变量提升到块级外 console.log('>'+i); } } 代码相当于 for (let i = 0; i < 2; i++) { var i; //此时代码变量提升到 for 的大括号外,出现重复定义。let 不允许变量重复 console.log(i); for (i = 0; i < 8; i++) { console.log('>'+i); } } ``` |