绑定
程序如何保持内部状态? 它如何记住东西? 我们已经看到如何从旧值中产生新值,但这并没有改变旧值,新值必须立即使用,否则将会再度消失。 为了捕获和保存值,JavaScript 提供了一种称为绑定或变量的东西:
let caught = 5 * 5;
这是第二种语句。 关键字(keyword)let
表示这个句子打算定义一个绑定。 它后面跟着绑定的名称,如果我们想立即给它一个值,使用=
运算符和一个表达式。
前面的语句创建一个名为caught
的绑定,并用它来捕获乘以5 * 5
所产生的数字。
在定义绑定之后,它的名称可以用作表达式。 这种表达式的值是绑定当前所持有的值。 这是一个例子:
let ten = 10;
console.log(ten * ten);
// → 100
当绑定指向某个值时,并不意味着它永远与该值绑定。 可以在现有的绑定上随时使用=
运算符,将它们与当前值断开连接,并让它们指向一个新值:
var mood = "light";
console.log(mood);
// → light
mood = "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
这个词代表常量。 它定义了一个不变的绑定,只要它存在,它就指向相同的值。 这对于一些绑定很有用,它们向值提供一个名词,以便之后可以很容易地引用它。