2017-09-02 27 views
0

我从MDN了解到,'未定义'被识别为原始值,ES doco也证实“未定义值”是“原始值,当变量未被赋值” 。'undefined' - 如果它被定义为一个原始值,它在内存级别的值是什么定义的?

我也明白,即使可变可以不被分配的值(即,未初始化变量),内存仍然创建其执行上下文的(“建立”相)期间分配为它在执行之前发生。这就解释了为什么当我们试图访问这个变量时,我们没有得到一个引用错误 - 相反我们只是遇到了'undefined'(即在控制台日志中)。

注意到上述情况,我的问题是,在内存中,这在变量的内存位置看起来如何?在未定义变量的已分配内存位置/地址处实际上是否有是在内存地址的值(什么都没有)?如果是这样,那么我们可以将该值描述为null(0x00)?

谢谢。

回答

1

即使变量未被赋值(即未初始化的变量),我也会理解,在执行发生前创建其执行上下文('创建'阶段)期间仍然为其分配内存。这就解释了为什么当我们试图访问这个变量时,我们没有得到一个引用错误 - 相反我们只是遇到了'undefined'。

不是。未初始化的变量与用undefined值初始化的变量有所不同。看看this answer explaining the initialisation for various kinds of declarations

这在变量的内存位置看起来像什么?

这是如何实现并不重要。每个实现可能会做不同,重要的是JS中的可观察效果。

实际上在变量的分配的内存位置/地址处有一个值,还是在内存地址空的值?

分配的内存始终保持一定的值。不过,这可能是JS中没有表示的值。

+0

有趣,谢谢。然而,你的第一条评论以及到那个线程的链接,当你在作用域顶部创建绑定时,你会谈到如何将var声明初始化为undefined。这不正是我在这里所说的,我不明白你的观点:“一个未初始化的变量与用undefined值初始化的变量有什么不同? var greet; console.log(greet); // undefined var hello = undefined; console.log(hello); // undefined console.log(greet == hello); // true console.log(greet === hello); // true 他们对我来说似乎是平等的(而不是'不同')? – 151SoBad

+0

@ 151SoBad尝试用'console。日志(迎接);让我们打招呼;' - *那*没有初始化。一个'var'总是以范围顶部的undefined值初始化。 – Bergi

+0

有道理 - 我还没有抓住使用'让' - 仍然非常香草的Javascript。我需要问的最后一件事是,有人在你的帖子中评论说:“对于函数声明,它们在执行开始之前被赋值”,这是一直困扰着我的概念。上一次我看看ES规范时,我认为函数声明仅在执行期间被分配了一个值?为“声明绑定实例化”期间发生的函数声明(逐字从ES6规范)分配一个值?这在执行过程中发生了吗? – 151SoBad

相关问题