gpt4 book ai didi

javascript - ES6 javascript block 作用域变量提升到 for header

转载 作者:太空宇宙 更新时间:2023-11-04 16:00:38 25 4
gpt4 key购买 nike

for 循环 block 中的所有 block 作用域变量是否都提升到循环头本身之上?

    var x = 4;

for(let i = 3; i < x; i++) {
let x = 2;
...
}

每次 i 与循环头中的 x 进行比较时,这是否会在 x 上产生死区错误?我知道 i 在 block 作用域中被下推,但为什么不是 x?

最佳答案

语言规范的相关部分是 13.7.4

如果for语句包含letconst声明,则创建一个作用域。

如果 for 语句包含 let 声明,则每次迭代都会创建一个作用域。

如果 for 主体是一个 block ,则创建一个范围。

以下是一些示例以及创建的范围:

//no scope
for(i = 0; i<3; i++) console.log(i);

//no scope
for(var i = 0; i<3; i++) console.log(i);

//for scope and iteration scope
for(let i = 0; i<3; i++) console.log(i);


// for scope, iteration scope and block scope
for(let i = 0; i<3; i++) {
console.log(i);
}

为什么我们需要迭代范围?对于关闭:

for(let i = 0; i<3; i++) {
setTimeout(() => console.log(i), 10);
}

无迭代范围的输出:3,3,3。迭代范围:0,1,2

关于javascript - ES6 javascript block 作用域变量提升到 for header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42311832/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com