将 javascript 与全局变量一起提升

下面的代码给出了输出undefined。我的印象是所有变量和函数声明都被提升到其作用域的顶部,因此b现在应该在调用a(). 但是,我仍然得到undefined作为我的输出?


a()


var b = 5;

function a() {

  console.log(b)

}


蓝山帝景
浏览 160回答 3
3回答

牧羊人nacy

你误解了提升的工作原理。它不提升分配,它只提升声明。您的代码等效于以下内容:var b; // undefinedfunction a(){ console.log(b)}a();b = 5;

翻翻过去那场雪

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

杨魅力

是的,变量声明被提升,但值没有设置在 上b。代码看起来像这样var bfunction a(){ console.log(b)}a()b = 5;
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript