Javascript ';未定义';-如果是';s被定义为一个基本值,它在内存级别的值定义是什么?

Javascript ';未定义';-如果是';s被定义为一个基本值,它在内存级别的值定义是什么?,javascript,memory,stack,undefined,heap,Javascript,Memory,Stack,Undefined,Heap,我从MDN了解到,“未定义”被认为是一个基本值,ES doco也证实了这一点,“未定义值”是“当变量未赋值时使用的基本值” 我也理解,即使变量可能没有赋值(即未初始化的变量),在执行之前创建其执行上下文(“创建”阶段)期间,内存仍会分配给它。这解释了为什么当我们试图访问变量时,我们没有得到一个引用错误,而只是遇到了“未定义”(即在控制台日志中) 注意上面的内容,我的问题是,在内存中,变量的内存位置是什么样子的?在未定义变量的分配内存位置/地址处是否实际存在值或是内存地址处的值为空(没有)?如果是

我从MDN了解到,“未定义”被认为是一个基本值,ES doco也证实了这一点,“未定义值”是“当变量未赋值时使用的基本值”

我也理解,即使变量可能没有赋值(即未初始化的变量),在执行之前创建其执行上下文(“创建”阶段)期间,内存仍会分配给它。这解释了为什么当我们试图访问变量时,我们没有得到一个引用错误,而只是遇到了“未定义”(即在控制台日志中)

注意上面的内容,我的问题是,在内存中,变量的内存位置是什么样子的?在未定义变量的分配内存位置/地址处是否实际存在是内存地址处的值为空(没有)?如果是这样的话,我们能否将该值描述为null(0x00)

谢谢

我也理解,即使变量可能没有赋值(即未初始化的变量),在执行之前创建其执行上下文(“创建”阶段)期间,仍会为其分配内存。这就解释了为什么当我们试图访问变量时,我们没有得到一个引用错误,而只是遇到了“未定义”

不可以。未初始化的变量与使用值
未定义的
初始化的变量不同。看一看

变量的内存位置是什么样的

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

变量的分配内存位置/地址处是否实际有值,或者内存地址处的值是否为空


分配的内存总是有一些值。不过,这可能是一个JS中不存在表示的值。

很有趣,谢谢。但是,您的第一条注释以及指向该线程的链接,在该线程中,您讨论了在范围顶部创建绑定时如何将var声明初始化为未定义。这不正是我在这里所说的吗,我不明白你的意思“未初始化的变量不同于用未定义的值初始化的变量”?var问候;console.log(问候);//undefined var hello=未定义;console.log(你好);//未定义的console.log(greet==hello);//true console.log(greet==hello);//对我来说,他们似乎是平等的(而不是“不同的”)@151SoBad尝试
console.log(问候);让我们打招呼-未初始化。
var
总是在作用域的顶部用
undefined
值初始化。这很有意义-我还没有掌握使用“let”的方法-仍然是非常普通的Javascript。我需要问的最后一件事是,有人在你的帖子上评论说“对于函数声明,在执行开始之前分配一个值”,这正是困扰我的同一个概念。上次我看ES规范的时候,我以为函数声明只在执行期间才赋值?是否在“声明绑定实例化”(ES6规范中的逐字逐句)期间为函数声明赋值?这是在执行过程中发生的,不是吗?@151SoBad函数声明被“提升”,这意味着当变量在作用域的顶部创建时,变量被正确地初始化。因此,如果u有一个变量表达式(使用“var”),即var x=5,变量声明(var x)被提升,其值初始化为/未定义(并且只有在执行期间,变量才设置为5)。而函数声明被提升,并且它们被初始化为/使用一个值(未定义)(与变量声明相反)?这个值是多少?函数对象的引用?如果是这样的话,那就是我感到困惑的原因——我认为函数对象只是在执行期间实例化的,而不是在执行之前实例化的(与执行之前的情况类似)