關於js es6之後的變量作用域的分析與總結

測試題

關於這個標題的提問,我想使用一個代碼引出

var a = 1;
let b = -1;
if(true){
    console.log('if裏面:',a,b);
    var a = 2;
    let b = -2;
} 
console.log('if後:',a,b);

for (let index = 0; index < 2; index++) {
    var a = 3; 
    let b = -3;
};
console.log('for後:',a,b);

{
    var a = 4;
    let b = -4;
}
console.log('{}後:',a,b);


 

可以檢測一下  自己能否回答上來這個問題。

我們需要使用到var的兩個特性 

var  1,可以重複定義變量 

        2,存在變量提升(其實ES6的文檔規範中並不存在變量提升這個詞 ,訪問一個未初始化的綁定(uninitialized mutable/immutable binding)

爲什麼要使用var 來檢測呢。使用如果一個作用域是新的作用域,必然會屏蔽外部的作用域,建立一個非全局作用域。其中創建變量這個var時候會存在變量的提升.在全局變量中存放一個一樣的變量。然後讀取這個變量是undefind的話。說明這個存在作用域,否則就會打印全局變量,說明並不存在作用域

順序、分支、循環

語句,是 JavaScript 中組織代碼的基礎語法組件,包括函數聲明等等在內的六種聲明,其實都被歸爲“語句”的範疇。因此,如果將一份 JavaScript 代碼中的所有語句抽離掉,那麼大概就只會剩下爲數不多的、在全局範圍內執行的表達式了。所以,理解“語句”在 JavaScript 中的語義是重中之重。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章