这是简单的代码:
{
function a() {}
a = "test";
}
console.log(a);
此代码将 ς a() {} 打印到控制台。这是为什么?谁能解释一下这种行为吗?
我原本期望得到“test”,但在控制台中得到“f a() {}”。
重新分配是在块内进行的,没有使用 var、let 或 const 进行任何显式声明。因此
a
由于提升而成为全局变量,并且不在console.log
语句的范围内。
当您使用
function
关键字声明函数时,它会被提升到其作用域的顶部。在这种情况下,a
的函数声明被提升到块的顶部,但随后对字符串的重新分配发生在函数声明之后。
有趣的是,删除该代码块“修复”了问题。