gpt4 book ai didi

javascript - let 和 for…of 的 block 作用域

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:14:49 26 4
gpt4 key购买 nike

let ES2015 中的语句允许我们声明 block 作用域变量,因此例如以下代码可以执行我们想要的操作:

let fs = [];
for (let i = 0; i < 3; i++) {
fs.push(() => i);
}
console.log(fs.map(f => f())); // 0, 1, 2

但是,它似乎不适用于 在 Firefox 中for…of loop它迭代可迭代对象。在这里, block 作用域被忽略,我们得到的结果与我们使用 var 的结果相同:

fs = [];
let nums = [0, 1, 2];
for (let i of nums) {
fs.push(() => i);
}
console.log(fs.map(f => f())); // 2, 2, 2

为什么 let 的行为在这里不起作用,for...of 循环内部有什么不同以至于它会中断?

最佳答案

正如其他人在评论中指出的那样,这种错误行为似乎是 Firefox 特有的,代码在其他环境(例如 V8/Node)中也能正常工作。

因此,我创建了一个 bug report为了它。当我从 Firefox 团队学到新东西时,我会更新这个答案。


此错误已于去年 8 月左右修复,此后已登陆中央代码库。该修复程序现在包含在 Firefox 51 release 中最终版本于 2017 年 1 月 24 日发布。

我正在使用 Firefox Nightly 预览版,它已经正常工作了一段时间。

关于javascript - let 和 for…of 的 block 作用域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34317339/

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