绑定
程序如何保持内部状态? 它如何记住东西? 我们已经看到如何从旧值中产生新值,但这并没有改变旧值,新值必须立即使用,否则将会再度消失。 为了捕获和保存值,JavaScript 提供了一种称为绑定或变量的东西:
let caught = 5 * 5;
这是第二种语句。 关键字(keyword)let表示这个句子打算定义一个绑定。 它后面跟着绑定的名称,如果我们想立即给它一个值,使用=运算符和一个表达式。
前面的语句创建一个名为caught的绑定,并用它来捕获乘以5 * 5所产生的数字。
在定义绑定之后,它的名称可以用作表达式。 这种表达式的值是绑定当前所持有的值。 这是一个例子:
let ten = 10;console.log(ten * ten);// → 100
当绑定指向某个值时,并不意味着它永远与该值绑定。 可以在现有的绑定上随时使用=运算符,将它们与当前值断开连接,并让它们指向一个新值:
var mood = "light";console.log(mood);// → lightmood = "dark";console.log(mood);// → dark
你应该将绑定想象为触手,而不是盒子。 他们不包含值; 他们捕获值 - 两个绑定可以引用相同的值。 程序只能访问它还在引用的值。 当你需要记住某些东西时,你需要长出一个触手来捕获它,或者你重新贴上你现有的触手之一。
我们来看另一个例子。 为了记住 Luigi 欠你的美元数量,你需要创建一个绑定。 然后当他还你 35 美元时,你赋予这个绑定一个新值:
let luigisDebt = 140;luigisDebt = luigisDebt - 35;console.log(luigisDebt);// → 105
当你定义一个绑定而没有给它一个值时,触手没有任何东西可以捕获,所以它只能捕获空气。 如果你请求一个空绑定的值,你会得到undefined值。
一个let语句可以同时定义多个绑定,定义必需用逗号分隔。
let one = 1, two = 2;console.log(one + two);// → 3
var和const这两个词也可以用来创建绑定,类似于let。
var name = "Ayda";const greeting = "Hello ";console.log(greeting + name);// → Hello Ayda
第一个var(“variable”的简写)是 JavaScript 2015 之前声明绑定的方式。 我们在下一章中,会讲到它与let的确切的不同之处。 现在,请记住它大部分都做同样的事情,但我们很少在本书中使用它,因为它有一些令人困惑的特性。
const这个词代表常量。 它定义了一个不变的绑定,只要它存在,它就指向相同的值。 这对于一些绑定很有用,它们向值提供一个名词,以便之后可以很容易地引用它。
