具体来说,Javascript中的“价值”是什么?

时间:2015-11-09 17:51:56

标签: javascript

我喜欢一个非常基本的描述性定义,特别是对以下问题的回答:

  1. 如何将值与其表示形式不同作为文字?

  2. 是否会创建一个值并继续存在,无论它是否存储?无论是否继续使用?

  3. 值是状态吗?

1 个答案:

答案 0 :(得分:1)

有趣的问题。

  

1)一个值如何与其表示形式不同?

巧克力蛋糕的方式与巧克力蛋糕的配方不同。 :-)文字是一种在我们的程序代码中写下我们想要使用的值的方法。该值是该代码运行时在内存中实际保存的值。

  

2)值是否已创建并继续存在,无论是否存储?

只有值存储在内存中才会存在,例如,如果它存在于简单变量或属性中或堆栈中。

  

无论是否继续使用?

内存中的值可能会持续存在一段时间,直到垃圾收集器回收它们所在的内存。

  

3)值是一个状态吗?

我可能没有资格回答这个问题,但有条件的我会说#34;是的。"如果你有一个简单的变量并且你将值1放入其中,那么稍后你将值2放入其中,值1不再存在(或任何地方)。

请注意,值不是唯一的。您可以一次在内存中的许多位置使用值1(并且可能会)。

让我们做一些思考实验:

var a = 42;
var b = a;

在第一行,我们有一个定义值42(数字)的文字。我们将它放在一个名为a的简单变量中。所以现在我们在a中有42个。

在第二行,我们a中的值复制到b。现在我们有两个值42的副本,一个在a,另一个在b。假设我们这样做:

var c = b * 2;

b读取值,从文字创建值2,JavaScript引擎执行数学运算,获取值84,并将其放入c

让我们思考一下我们不再使用的价值观:

function foo() {
    var o = {};
    o.p = 42;
    console.log(o.p);
}
foo();

当我们调用foo时,我们创建一个对象,并使用我们放在o中的值记住该对象在内存中的位置。 (该值称为"对象引用;"它告诉JavaScript引擎对象所在的位置。与之前的数字值不同,该对象实际上 in { {1}},说明它所在的值是o。)

现在我们o。因此,值42存储在对象o.p = 42上名为p的属性中,就像之前在我们的变量o中一样;属性有点像变量,但更高级。

我们输出值,然后a返回。 foo,唯一一个对我们创建的对象有引用的变量已经消失了。所以现在对象在内存中,但是我们的代码都不知道它在哪里(JavaScript引擎知道,但我们的代码没有)。最终,如果它需要释放对象正在消耗的内存,JavaScript引擎将回收该内存并将其用于其他内容,以及内存中o属性所使用的42将消失。