【问题标题】:Why hoisting works differently in variables compared to functions? [duplicate]与函数相比,为什么提升在变量中的工作方式不同? [复制]
【发布时间】:2020-02-27 13:00:31
【问题描述】:

我最近一直在阅读一些文档,并遇到了一些与 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"

上面的代码声明“undefined

当上述代码开始执行时:

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

但事实并非如此,而是输出 undefined

这是为什么呢?

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

【问题讨论】:

  • 请参阅accepted answer 了解此问题。这将向您解释函数行为的原因。

标签: javascript hoisting


【解决方案1】:

代码

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

被解释为好像它是写的

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

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

【讨论】:

  • 是的,应该是“你好”吧?因为它已被重新分配,为什么它是“未定义的”?
  • 不,是undefined,因为console.log() 调用发生在初始化之前。
猜你喜欢
  • 2022-01-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-30
  • 2017-10-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多