2.2 绑定
程序如何保持内部状态?它如何记住事情呢?我们已经看到了如何从旧值生成新值,但这不会改变旧值,并且必须立即使用新值,否则它将再次消失。为了捕获和保留值,JavaScript提供了一个称为绑定(binding)或变量(variable)的东西:
这是第二种语句。特殊单词(关键字)let表示此语句将定义一个绑定。它后面是绑定的名称,如果我们想要立即给它一个值,则由=运算符和表达式来完成。
前面的语句创建了一个名为caught的绑定,并用它来获取5乘以5生成的数字。
定义绑定后,其名称可用作表达式。此类表达式的值是绑定当前持有的值。下面是一个示例:
当绑定指向一个值时,这并不意味着它永远与此值相关联。=运算符可随时用于现有绑定,以断开它们与当前值的连接,并让它们指向一个新的值。
你应该将绑定想象成触手,而不是盒子。它们不包含值,只抓住值,两个绑定可以引用相同的值。程序只能访问它仍然引用的值。当你需要记住某样东西时,你长出一个触手来抓住它,或者你重新连接你现有的某个触手。
让我们来看另一个例子。为了记住Luigi还欠你多少美元,你创建了一个绑定。然后,当他偿还35美元后,你给这个绑定一个新的值。
当你定义绑定而不赋予它值时,触手就没有什么可抓住的,所以它在稀薄的空气中结束。如果索求空绑定的值,你将获得undefined值。
单个let语句可以定义多个绑定。多个绑定的定义必须用逗号分隔。
var和const等单词也可用于创建绑定,其方式类似于let。
第一个var(variable的缩写)是在2015年以前的JavaScript中声明绑定的方式。我将在下一章回过头来精确解释它与let的区别。现在,请记住,它大多时候与let做同样的事情,但我们在这本书很少使用它,因为它有一些令人困惑的属性。
const一词代表常量(constant)。它定义了一个常量绑定,只要它存在,它就一直指向相同的值。这对于为值指定名称的绑定很有用,在以后可以轻松地引用它。