最近,在阅读 Marijn Haverbeke 的“Eloguent Javascript”一书时,在第 2 章:程序结构,第 2 节:变量中,我遇到了这样的陈述:
They (variables) do not contain values; they grasp them
然后,他继续使用 Octopus 有很多手的类比来说明变量如何掌握值。
这是我第一次看到变量的这种表征。在我读过的其他书籍和/或文章中,变量通常被比作包含值的框(在计算机内存中)。
我的问题是:哪个是正确的?
- Variables can be thought of as boxes containing values
- Variables don't contain values, they only grasp them
我是不是把这一切都搞错了?这两种解释是同一回事吗?
最佳答案
我认为 Haverbeke 试图通过这个声明表达的是,所有在 javascript 中不是原语的变量都是引用。
在回答您的问题时,两种解释都是正确的,但适用于不同的上下文。
让我们看看盒子方法。我们可以将变量视为包含原始值的框。在 javascript 中,它们是 Number、String、null、undefined 和 Boolean。
现在,我们来看看 Octopus 方法。 javascript 中的其他内容太大而无法放入盒子中。假设您想将房子存放在一个盒子里。它根本不适合。这就是哈弗贝克说变量掌握值(value)的原因。有一个很大的 field ,所有放不下盒子的东西都放在那里。你还有一个盒子,但里面没有东西。相反,它包含字段中的坐标,您可以在其中找到您的值。这称为对象的引用,或对象在内存(字段)中的地址。
抓取概念旨在确保您不会认为传递对象会复制它。当您将一个对象从一个变量传递到另一个变量时,该对象是相同的。你有两个地址相同的盒子。从这些变量中的任何一个更改对象都会更改这两个变量。
关于javascript - 变量说明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31314934/