let和const的共同屬性:
聲明的變量只在它所在的代碼塊有效。
不存在變量提升
暫時(shí)性死區(qū) ---> 只能在聲明的位置后面使用豆挽。
不允許重復(fù)聲明(內(nèi)層作用域可以定義外層作用域的同名變量托呕。)比如說:
function f1() {
let n = 5;
if (true) {
let n = 10;
}
console.log(n); // 5
}
塊級作用域
沒有塊級作用域的壞處:
內(nèi)層變量可能會覆蓋外層變量含蓉。
用來計(jì)數(shù)的循環(huán)變量泄露為全局變量,比如說: 變量i只用來控制循環(huán)项郊,但是循環(huán)結(jié)束后馅扣,它并沒有消失,泄露成了全局變量着降。
var s = 'hello';
for (var i = 0; i < s.length; i++) {
console.log(s[i]);
}
console.log(i); // 5
有一個地方需要注意: ES6 的塊級作用域必須有大括號差油,如果沒有大括號,JavaScript 引擎就認(rèn)為不存在塊級作用域任洞。
// 第一種寫法蓄喇,報(bào)錯
if (true) let x = 1;
// 第二種寫法,不報(bào)錯
if (true) {
let x = 1;
}
2. const
聲明一個只讀的常量交掏。一旦聲明妆偏,常量的值就不能改變。
const
聲明的變量不得改變值盅弛,這意味著钱骂,const一旦聲明變量,就必須立即初始化挪鹏,不能留到以后賦值见秽。
最后:
ES6 聲明變量的六種方法
ES5 只有兩種聲明變量的方法:var
命令和function
命令。ES6 除了添加let
和const
命令讨盒,還有另外兩種聲明變量的方法:import
命令和class
命令解取。所以,ES6 一共有 6 種聲明變量的方法催植。