2

最近,在阅读 Marijn Haverbeke 的《Eloguent Javascript》一书时,在第 2 章:程序结构,第 2 节:变量中,我遇到了这样的语句:

它们(变量)不包含值;他们抓住他们

然后,他继续使用多手章鱼的类比来演示变量如何掌握值。

这是我第一次看到这样的变量表征。在我读过的其他书籍和/或文章中,变量通常被比作包含值的盒子(在计算机的内存中)。

我的问题是:哪个是正确的?

  1. 变量可以被认为是包含值的盒子
  2. 变量不包含值,它们只包含它们

我是不是脑子里全都搞错了?两种解释的意思是一样的吗?

4

1 回答 1

1

我认为 Haverbeke 想说的是,所有不是 javascript 中原语的变量都是引用。

在回答您的问题时,两种解释都是正确的,但适用于不同的情况。

让我们看看盒子方法。我们可以将变量视为包含 PRIMITIVE 值的框。在 javascript 中,它们是 Number、String、null、undefined 和 Boolean。

现在,我们来到章鱼方法。javascript 中的其他内容太大而无法放入盒子中。假设你想把你的房子放在一个盒子里。它根本不适合。这就是哈弗贝克说变量掌握价值的原因。有一个很大的场地,你所有的东西都放不下盒子。你还有一个盒子,但里面没有那个东西。相反,它包含字段中的坐标,您可以在其中找到您的值。这称为对对象的引用,或对象在内存中的地址(字段)。

抓握概念旨在确保您不会认为传递对象会复制它。当您将一个对象从一个变量传递给另一个变量时,该对象是相同的。您有两个地址相同的盒子。从这些变量中的任何一个更改对象都会更改这两个变量。

于 2015-07-09T10:49:00.133 回答