详细地说;值“;在Javascript中
What, in detail, is a "value" in Javascript?
我喜欢一个非常基本的描述性定义,特别是以下问题的答案:
-
一个值与其作为文字的表示有何不同?
-
一个值是否被创建并继续存在,而不管它是否被存储?不管它是否继续使用?
-
一个值是一种状态吗?
有趣的问题。
1) 一个值与其作为文字的表示有何不同?
巧克力蛋糕和巧克力蛋糕的配方是不同的文字是一种写下我们希望在程序代码中使用的值的方式。该值是代码运行时内存中实际保存的值。
2) 一个值是否被创建并继续存在,而不管它是否被存储?
一个值只有在内存中才存在,例如,如果它在一个简单变量、一个属性或堆栈中。
不管它是否继续使用?
内存中的值可能会持续存在一段时间,直到垃圾收集器回收它们所在的内存
3) 一个值是一种状态吗?
我可能没有资格回答这个问题,但有条件地我会说"是的"。如果你有一个简单的变量,你把值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引擎对象在哪里。与前面的数值不同,对象实际上不是o
中的,该值表示它在o
中的位置。)
现在我们做o.p = 42
。因此,值42被存储在对象o
的一个名为p
的属性中,就像它之前在我们的变量a
中一样;属性有点像变量,但更花哨。
我们输出该值,然后foo
返回。o
,唯一一个引用了我们创建的对象的变量,已经消失了。因此,现在对象在内存中,但我们的代码都不知道它在哪里(JavaScript引擎知道,但代码不知道)。最终,如果需要释放对象正在消耗的内存,JavaScript引擎将回收该内存并将其用于其他用途,而p
属性所在的内存中的42将消失。
- 为什么不't Javascript对我的输入值进行了一些重新检查
- 创建一个类似链接的按钮,并通过Javascript函数打开一个新的弹出窗口
- 将函数的上下文应用于javascript变量
- 使用php或javascript从facebook相册URL中删除多余的部分
- 正在添加'X'按钮,在文本字段旁边使用javascript
- 如何在JavaScript中将字符串转换为函数引用
- 模糊事件的Javascript测试
- Javascript更改图标
- 如何将HTML id分配给元素,以及如何将JavaScript应用于元素
- 如何使用WCF服务和javascript表单post上传.doc文件
- javascript结合了数组和字典
- 这是什么 ==- javascript 运算符
- 从javascript创建一个列表
- 无法在通过jQuery的ajax加载的页面中执行javascript
- Javascript:selenium Web驱动程序isDisplayed()不工作
- 如何通过ajax刷新JSF填充的javascript变量
- 如何在Javascript中将JSon对象转换为数组
- Javascript生成的表单未提交
- 使用javascript将动态表从一个html页面打印到另一个html页
- 通过javascript重定向html传递php变量