Nat*_*lie 4 javascript computer-science
MDN文档指出:
let 绑定是在包含声明的(块)作用域的顶部创建的,通常称为“提升”。与用 var 声明的变量不同,var 将以 undefined 值开始,而 let 变量在其定义被求值之前不会被初始化。在初始化之前访问变量会导致引用错误。从块开始直到处理初始化为止,该变量处于“临时死区”。
“绑定”指的是(和let的提升)只是关键字,还是只是创建存储空间(与关键字无关)?letconstlet
以前我以为变量关键字和变量名一起构成了一个声明,但是在我最近问的一个问题中,回答者说它们实际上是一个初始化。
我很抱歉在编写该 MDN 段落时使用了两个不同的术语。出于该文章中的所有目的,“变量”和“绑定”应理解为同一事物。但让我们详细讨论一下。
\n\n变量声明创建变量(作为抽象实体)。它告诉编译器应该引入一个新变量,并且还可以告诉它名称、要保存的类型、初始值、范围等(取决于语言)。在 JS 中,有不同类型的声明来做不同的事情,例如
\n\nvar有一个名称、一个可选的初始化程序和特定于的范围规则varfunction有一个(有时是可选的)名称,该值始终是给定的并且已知是一个函数const有一个名称,一个必需的初始化程序,应该是不可变的,并且具有词法范围绑定是变量名称与变量实体的关联,例如“指用”声明的变量。此类绑定取决于范围,即在每个不同的范围中都有不同的绑定,因此标识符可能引用不同范围中的不同事物。\n考虑到 JavaScript 的作用域规则,变量声明还会导致在各自的作用域中创建其自身的绑定。xclass xx
因此,绑定是使名称可供使用的原因。这就是我所说的“绑定let是在范围的顶部创建的””。它与变量的存在、为其分配内存或正在初始化无关。