在javascript中与全局变量一起提升

在javascript中与全局变量一起提升,javascript,hoisting,Javascript,Hoisting,下面的代码给出了未定义的输出。我的印象是,所有变量和函数声明都被提升到其作用域的顶部,因此b现在应该在调用a之前位于作用域的顶部。但是,我的输出仍然没有定义 A. var b=5; 功能a{ 控制台.logb } 是,变量声明已挂起,但未在b上设置值。代码如下所示 变量b 功能a{ 控制台.logb } A. b=5 是,变量声明已挂起,但未在b上设置值。代码如下所示 变量b 功能a{ 控制台.logb } A. b=5 你误解了提升的工作原理。它不提升作业,它只提升声明。您的代码相当于以

下面的代码给出了未定义的输出。我的印象是,所有变量和函数声明都被提升到其作用域的顶部,因此b现在应该在调用a之前位于作用域的顶部。但是,我的输出仍然没有定义

A. var b=5; 功能a{ 控制台.logb
} 是,变量声明已挂起,但未在b上设置值。代码如下所示

变量b 功能a{ 控制台.logb } A.
b=5 是,变量声明已挂起,但未在b上设置值。代码如下所示

变量b 功能a{ 控制台.logb } A.
b=5 你误解了提升的工作原理。它不提升作业,它只提升声明。您的代码相当于以下代码:

var b; // undefined
function a(){
 console.log(b)
}
a();
b = 5;

你误解了提升的工作原理。它不提升作业,它只提升声明。您的代码相当于以下代码:

var b; // undefined
function a(){
 console.log(b)
}
a();
b = 5;

提升意味着变量将“在顶部”创建,但它不会改变赋值发生的时间,当执行到达写入的部分时,b=5部分仍然发生。因此,如果在此之前调用a,b存在,但尚未分配任何值…因此,未定义的提升意味着变量将“在顶部”创建-但它不会改变值分配发生的时间,当执行到达写入的部分时,b=5部分仍会发生。因此,如果在此之前调用a,则b存在,但尚未获得任何赋值…因此,未定义的

您正在使用函数声明创建函数。因此,函数声明也被提升,以便在声明之前使用它们。

您正在使用函数声明来创建函数。因此,函数声明也被挂起,以便在声明之前使用它们。

声明被挂起,而不是初始化。我们很好地理解了为什么会看到未定义:声明被挂起,而不是初始化。我们很好地理解了为什么会看到未定义: