在ECMAScript6中又新增了兩個變量聲明關鍵字:let和const。那麼這個
有什麼不同?
var只有全局作用域和函數作用域,所謂全局作用域就是在代碼的任何位置都能訪問var聲明的變量,而函數作用域在變量聲明的當前函數內部訪問變量。函數外部是無法訪問函數內部聲明的變量的
var messageOne="hello word !";
function message(){
var messageTwo="你好,世界!";
①console.log(messageTwo);
②console.log(messageOne);
}
③console.log(messageTwo);//Uncaught ReferenceError: messageTwo is not defined
④console.log(messageOne);
message();
運行代碼,我們只③出現語法錯誤:messageTwo is not defined,這是因為③是我們在函數內部用var聲明的變量,屬於函數局部變量,函數外部是不能訪問這個變量的.
let是塊作用域,所謂塊作用就是控制流程語句的有效範圍。如果我們控制流程語句中使用let定義一個變量,那麼我們在控制流程語句外是無法訪問這個變量的。
for (let i = 0; i < 3; i++) {
let messageOne= "你好,世界!";
①console.log(messageOne);//你好,世界!
}
②console.log(messageOne);//messageTwo is not defined
②代碼報錯,是因為messageOnes是let聲明的局部變量,在控制流程語句for的外部無法訪問該變量。