绑定

程序如何保持内部状态? 它如何记住东西? 我们已经看到如何从旧值中产生新值,但这并没有改变旧值,新值必须立即使用,否则将会再度消失。 为了捕获和保存值,JavaScript 提供了一种称为绑定或变量的东西:

  1. let caught = 5 * 5;

这是第二种语句。 关键字(keyword)let表示这个句子打算定义一个绑定。 它后面跟着绑定的名称,如果我们想立即给它一个值,使用=运算符和一个表达式。

前面的语句创建一个名为caught的绑定,并用它来捕获乘以5 * 5所产生的数字。

在定义绑定之后,它的名称可以用作表达式。 这种表达式的值是绑定当前所持有的值。 这是一个例子:

  1. let ten = 10;
  2. console.log(ten * ten);
  3. // → 100

当绑定指向某个值时,并不意味着它永远与该值绑定。 可以在现有的绑定上随时使用=运算符,将它们与当前值断开连接,并让它们指向一个新值:

  1. var mood = "light";
  2. console.log(mood);
  3. // → light
  4. mood = "dark";
  5. console.log(mood);
  6. // → dark

你应该将绑定想象为触手,而不是盒子。 他们不包含值; 他们捕获值 - 两个绑定可以引用相同的值。 程序只能访问它还在引用的值。 当你需要记住某些东西时,你需要长出一个触手来捕获它,或者你重新贴上你现有的触手之一。

我们来看另一个例子。 为了记住 Luigi 欠你的美元数量,你需要创建一个绑定。 然后当他还你 35 美元时,你赋予这个绑定一个新值:

  1. let luigisDebt = 140;
  2. luigisDebt = luigisDebt - 35;
  3. console.log(luigisDebt);
  4. // → 105

当你定义一个绑定而没有给它一个值时,触手没有任何东西可以捕获,所以它只能捕获空气。 如果你请求一个空绑定的值,你会得到undefined值。

一个let语句可以同时定义多个绑定,定义必需用逗号分隔。

  1. let one = 1, two = 2;
  2. console.log(one + two);
  3. // → 3

varconst这两个词也可以用来创建绑定,类似于let

  1. var name = "Ayda";
  2. const greeting = "Hello ";
  3. console.log(greeting + name);
  4. // → Hello Ayda

第一个var(“variable”的简写)是 JavaScript 2015 之前声明绑定的方式。 我们在下一章中,会讲到它与let的确切的不同之处。 现在,请记住它大部分都做同样的事情,但我们很少在本书中使用它,因为它有一些令人困惑的特性。

const这个词代表常量。 它定义了一个不变的绑定,只要它存在,它就指向相同的值。 这对于一些绑定很有用,它们向值提供一个名词,以便之后可以很容易地引用它。