提升、作用域和函数声明

问题描述 投票:0回答:1

这是简单的代码:

{
  function a() {}
  a = "test";
}

console.log(a);

此代码将 ς a() {} 打印到控制台。这是为什么?谁能解释一下这种行为吗?

我原本期望得到“test”,但在控制台中得到“f a() {}”。

javascript function scope hoisting
1个回答
0
投票

重新分配是在块内进行的,没有使用 var、let 或 const 进行任何显式声明。因此

a
由于提升而成为全局变量,并且不在
console.log
语句的范围内。

当您使用

function
关键字声明函数时,它会被提升到其作用域的顶部。在这种情况下,
a
的函数声明被提升到块的顶部,但随后对字符串的重新分配发生在函数声明之后。

有趣的是,删除该代码块“修复”了问题。

© www.soinside.com 2019 - 2024. All rights reserved.