繁体   English   中英

为什么JavaScript在第二种情况下不查找全局范围

[英]Why javascript doesn't look up global scope in second case

在控制台中执行时,foo将按预期值查找b值为2

function foo() {
    console.log(b)
}
var b = 2
foo() // 2 for console.log

但是当我这样做时

function foo() {
    console.log(b)
    var b = 2
    console.log(b)
}
var b = 2
foo() // undefined for first console.log

它不再在全球范围内查找b为什么?

这是因为所谓的Javascript提升,这是javascript看到您的代码的方式:

function foo() {
  var b; // javascript hoisted this variable on top
  console.log(b) // so here you see underfined
  b = 2;
  console.log(b);
}

现在,因为JavaScript hoised变量b上的功能之上,你的全局变量b ,将不再使用,因此声明immendiately升起后可变显示undefined 因此,如果您从函数中删除新的声明( var关键字),则仍应可以访问全局b变量。

顺便说一句,在函数顶部声明所有变量是一个好习惯,例如:

function foo() {
  var b = 2;
  console.log(b);
}

要了解有关该主题的更多信息,请参见:

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM