与变量相比,为什么起重在变量中的作用不同?

时间:2020-02-27 13:00:31

标签: javascript hoisting

我最近一直在阅读一些文档,并遇到了一些与JavaScript提升相关的不一致模式。

它如下:

在功能中,

function abc(){
 console.log("worked")
}

abc();

输出:有效

abc();
function abc(){
 console.log("worked")
}

输出:有效

这是由于起重而发生的,因为在执行上下文中,最初为abc保存了内存。

但是在变量的情况下不会发生同样的事情,我想知道为什么

例如,

var a = "Hello"
console.log(a)

输出:您好

**那么为什么下面给出的代码不一样?

console.log(a)
var a = "Hello"

上面的代码指出“ 未定义

以上代码开始执行时:

  1. a设置为未定义
  2. 然后将未定义的值重新分配给提供的值“ Hello”

但这不是事实,而是输出未定义

那是为什么?

感谢您的阅读。 任何帮助将非常感激。

1 个答案:

答案 0 :(得分:2)

代码

console.log(a)
var a = "Hello"

被解释为好像是写的

var a;
console.log(a);
a = "Hello"

为什么?这就是指定语言工作的方式。提升整个初始化表达式会在很多情况下造成问题。