JS中的詞法做用域(靜態做用域)和動態做用域

首先說明一下,JavaScript沒有用動態做用域概念,但 this 機制卻和動態做用域相似!
JavaScript是經過做用域鏈的方式進行變量查找的,而JS做用域鏈是詞法做用域,也就作靜態做用域!
詞法做用域:在函數聲明(定義)時肯定的
動態做用域:在函數調用時肯定的
javascript

var cat = '有魚';
function person() {
    console.log(cat); // 有魚
}
function student() {
    var cat = '年年';
    person();
}
student();

代碼分析:
①調用student函數,其內部又調用了person函數,由於JS使用的是詞法做用域,即關心的是函數聲明時的做用域,因此咱們須要看查person定義裏面的狀況;
②person函數內部輸出了cat,此時,找不到cat,按照做用域鏈特性向外層尋找,找到了cat爲‘有魚’;因此結果輸出的是‘有魚’;
③若是JS支持動態做用域,則須要看person()調用所在的做用域,即cat='年年';不過JS不支持動態做用域!java

相關文章
相關標籤/搜索