es6--let和const
阿新 • • 發佈:2017-05-12
標簽 cau ria ble ready 復合 iss 模式 ren
參考資料:
http://es6.ruanyifeng.com/#docs/let
測試環境(本文的代碼均是在chrome下運行)
在<script>標簽中添加‘use strict‘,即嚴格模式
let
- 聲明變量,可以更改,但不允許重復聲明;
let a = 1; let a = 2; //Uncaught SyntaxError: Identifier ‘a‘ has already been declared let b = 1; b = 2; console.log(b); //2
- 沒有聲明提升;
console.log(a); //Uncaught ReferenceError: a is not defined let a = 1;
- let聲明的變量只在它所在的代碼塊內有效 (塊級作用域:指一個函數或變量只在該區域起作用)
{ let a = 1; console.log(a); //1 } console.log(a);// Uncaught ReferenceError: a is not defined
- 暫時性死區:指從塊的開始到聲明這段的區域,如果在變量聲明之前使用該變量,會報錯
const
- 聲明一個只讀變量(不允許重復聲明;值不允許修改;只聲明不賦值會報錯),但當聲明的值是一個對象的時候,對象的屬性是可以更改的。
//一旦聲明,值不能更改 const a = 1; console.log(a); //1 a = 2; console.log(a); //Uncaught TypeError: Assignment to constant variable. //只聲明不賦值 const b; //Uncaught SyntaxError: Missing initializer in const declaration //不能重復聲明 const b = 1; const b = 2; //Uncaught SyntaxError: Identifier ‘b‘ has already been declared //值為對象時,對象的屬性/屬性值可以更改 const b = { num : 1 } b.num = 2; console.log(b.num); //2
-
沒有變量提升
console.log(a); //Uncaught ReferenceError: a is not defined const a = 1;
- const聲明的變量只在它所在的代碼塊內有效
{ const a = 1; console.log(a); //1 } console.log(a); //Uncaught ReferenceError: a is not defined
- 與let一樣,存在暫時性死區
總結
const和let命令都是es6在es5聲明變量方法(var function)基礎上添加的新方法:
共同點:
- 變量一經聲明,不能重復聲明
- 所聲明的變量都只在他們所處代碼塊區域內有效
- 都沒有變量提升
- 都存在暫時性死區
不同點:
const聲明的變量是只讀變量,變量聲明之後值不允許更改,原因是const聲明的變量指向是一個內存地址,對於簡單數據類型(number,boolean,string),值就保存在變量指向的那個內存地址,因此等同於常量。但對於復合類型的數據(主要是對象和數組),變量指向的內存地址,保存的只是一個指針,const
只能保證這個指針是固定的,至於它指向的數據結構是不是可變的,就完全不能控制了。
es6--let和const