測試題
關於這個標題的提問,我想使用一個代碼引出
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 中的語義是重中之重。