在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/HTML/ 關(guān)于JS函數(shù)的作用域?

關(guān)于JS函數(shù)的作用域?

function foo(){ 
  console.log(a); 
}
function bar () { 
  var a = 3; 
  foo(); 
} 
var a = 2; 
bar(); 

上述代碼,為什么結(jié)果是2呢,不應(yīng)該是在bar()函數(shù)里面調(diào)用的foo()函數(shù),所以應(yīng)該先在bar()的作用域里面找有沒有a,然后再去全局作用域里找嗎?
希望走過、路過的大神能幫忙解決一下疑惑,萬分感謝。

回答
編輯回答
伐木累

foo使用的是全局變量的a

2017年3月5日 16:33
編輯回答
陌璃

你可以假設(shè)一下:如果讓你設(shè)計編程語言時,如果一個函數(shù)被調(diào)用,如何確定他的作用域?
函數(shù)作用域無外乎兩種:靜態(tài)作用--按照書寫代碼時函數(shù)說在的位置確定作用域;動態(tài)作用域--函數(shù)被調(diào)用是動態(tài)確定。

JS和大多數(shù)編程語言一樣,采取了靜態(tài)作用域。

你可以以這兩個關(guān)建詞進(jìn)行Google搜索,非常多的博客有討論

2018年6月23日 20:49
編輯回答
亮瞎她

這里的作用域規(guī)則是定義時的作用域規(guī)則,不是你調(diào)用時的,即靜態(tài)作用域

如果你這樣寫:

function bar () { 
  var a = 3; 
  function foo(){ 
    console.log(a); 
  }
  foo(); 
} 
var a = 2; 
bar(); 

那肯定輸出 3 了

2017年10月11日 17:39