我正在 Chrome 开发工具中检查一个简单脚本的执行上下文。我注意到在断点或调试器语句上,chrome 开发工具在范围部分显示一个新类别。它有:
我相信脚本与
let
和 const
的存储方式有关,因为它们没有附加到全局窗口对象。然而,我的理解是它们仍然在“全局范围”内,但不绑定到全局对象。
我相信“Script”标签代表了这个想法,但为什么选择“script”这个名字呢?
我检查了文档,但不幸的是,它没有提到“脚本”是什么。
这是我的示例的屏幕截图:
有人对所使用的命名约定有任何了解吗?
因为 scirpt 范围内的变量可以在另一个脚本标签(包括外部脚本标签)中访问。
参见这个问题。
顺便说一句,Firefox 的开发工具简单地将这样的范围称为“块”。 例如:
var a = 0;
let b = 1;
function test() {
function test2() {
let c = 2;
}
test2();
}
test();
在 JavaScript 中,Let 和 const 存储在单独的内存空间中,而不是存储在全局内存中。这里的单独内存空间显示在脚本部分。
额外:Let 和 const 被提升并在单独的内存空间中获取内存,但在它们被初始化之前,它们被称为“临时死区”
示例:
console.log(x); // line1
.
.
.
let x = 10; // line20
console.log(x); // line21
在第 1 行:x 被提升并获得内存空间,但尚未初始化
第20行:x已初始化
因此,在第 1 行到第 20 行之间:x 被认为处于“暂时死区”,如果尝试访问,将会给出错误。