javascript - 变量说明

标签 javascript variables program-structure

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

They (variables) do not contain values; they grasp them

然后,他继续使用 Octopus 有很多手的类比来说明变量如何掌握值。

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

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

  1. Variables can be thought of as boxes containing values
  2. 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/

相关文章:

javascript - 如何构建大型 AngularJS 应用程序

javascript - 如何通过一次调用 format() 格式化 04Apr

javascript - 检查多个复选框 jQuery

javascript - 使用 POST 请求重定向的好方法?

javascript - ReactJS - TypeError : requests. map 不是函数

variables - 如何在 emacs-lisp 中将变量约束为正数?

ios - Swift:对具有多种类型的变量进行建模

Javascript:变量作为 While 条件

java - 如何在当前使用 java 的计算机上运行的另一个 java 应用程序上查找和执行方法?

python - For-Else 循环在另一个 For 循环中