在顶级词法作用域中,省略了词法声明
作者: bakkot创建于 2018年5月8日更新于 2021年9月2日
标签bughelp wantedserializerlevel 2 (easy)
`const f = 0;` 在 Prepack 中被认为是完全死的。但事实并非如此: 顶层词法作用域是跨脚本共享的,位于全局作用域之下。因此,虽然这可能不是一个全局声明,因为它不会创建全局对象的属性,但它对页面上的其他代码是可用的,就像它是 `var` 而不是 `const` 一样;其他脚本可以写 `console.log(f)` 来打印 `0`。从这个意义上讲,删除它并不安全。这可能是一个 bug,也可能不是,取决于你的观点。我只是不确定 prepack 认为什么是死的: `{ const f = 0; }` 绝对是死的, `var f = 0;` 绝对不是,但这中间的情况比较模糊。
内容来源: facebookarchive/prepack