最近,在阅读这本书的时候,“Eloguent Javascript"作者Marijn Haverbeke在第2章:程序结构,第2节:变量中,我发现了这个陈述:
他们(变量)不包含值;他们抓住了他们
然后,他继续使用章鱼的类比用许多手来证明变量如何掌握价值。
这是我第一次看到变量的这种表征。在我读过的其他书籍和/或文章中,变量通常被比作包含值的框(在计算机的内存中)。
我的问题是:哪个是正确的?
- 变量可以被视为包含值的框
- 变量不包含值,只能抓住它们
醇>
我是否在脑子里弄错了?这两种解释是否意味着相同的事情?
答案 0 :(得分:1)
我认为Haverbeke试图通过这句话说的是,所有javascript中不是原语的变量都是引用。
在回答你的问题时,两种解释都是正确的,但适用于不同的情况。
让我们来看看方框。我们可以将变量视为包含PRIMITIVE值的框。在javascript中,这些是Number,String,null,undefined和Boolean。
现在,我们来到章鱼的方法。 javascript中的其他内容太大而无法容纳在盒子中。假设你想把你的房子存放在一个盒子里。它完全不适合。这就是Haverbeke说变量掌握价值的原因。有一个很大的领域,你所有的东西都太大了,无法容纳盒子。你还有一个盒子,但它不包含这个东西。相反,它包含字段中的坐标,您可以在其中找到您的值。这称为对象的引用,或 memory (字段)中对象的地址。
抓取概念旨在确保您不会认为传递对象会将其复制过来。将对象从一个变量传递到另一个变量时,该对象是相同的。你有两个具有相同地址的盒子。从这些变量中的任何一个更改对象都将改变两个变量。