簡體   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