let 和 const 命令
ES6 新增了let
命令與const
命令,用來聲明變量。
1. let命令
let
命令,用來聲明變量。它所聲明的變量,只在let
命令所在的代碼塊內有效。
{
let a = 10;
var b = 1;
}
a; // ReferenceError: a is not defined.
b; // 1
let
命令聲明的變量,不會出現"變量提升"
現象。
// var聲明的變量會出現變量提升
console.log(foo); // 'undefined'
var foo = 2;
// let聲明的變量不會出現變量提升
console.log(bar); // 報錯ReferenceError
let bar = 2;
ES6 規定,一個區塊對let
和const
命令聲明的變量,會形成了封閉作用域。凡是在聲明之前就使用這些變量,就會報錯。
{
// 變量未聲明就使用,報錯。
x= 'abc'; // Uncaught ReferenceError: Cannot access 'mm' before initialization
let x;
}
let
命令不允許在相同作用域內,重複聲明同一個變量。
function func() {
let a = 10;
let a = 1; // Uncaught SyntaxError: Identifier 'a' has already been declared
}
2. const命令
const
命令聲明一個只讀的常量。一旦聲明,常量的值就不能改變。
const PI = 3.1415926;
PI // 3.1415926
// 不能再次賦值
PI = 3; // VM1846:4 Uncaught TypeError: Assignment to constant variable
const
聲明的變量不得改變值,即const
一旦聲明變量,就必須立即初始化。
// 聲明時必須立即初始化
const size; // Uncaught SyntaxError: Missing initializer in const declaration
const
的作用域與let
命令相同:只在聲明所在的塊級作用域內有效。
if (true) {
// 只在本作用域內有效
const MAX = 5;
}
MAX // Uncaught ReferenceError: MAX is not defined
const
聲明的常量,也與let
一樣不可重複聲明。
const yyy = 12;
// 不能重複聲明變量
const yyy = 36; // Uncaught SyntaxError: Identifier 'yyy' has already been declared
const
命令聲明的變量的值不能改變,實際上是變量指向的那個內存地址所保存的數據不得改變。對於簡單類型的數據,值就保存在變量指向的那個內存地址,因此等同於常量。但對於複合類型的數據,變量指向的內存地址,保存的只是一個指向實際數據的指針,const
只能保證這個指針是固定的,至於它指向的數據結構是不是可變的,沒有影響。
// 聲明一個變量並賦值
const example = {};
// 爲 example 添加一個屬性,可以成功
example.x = 123;
// 將 example 指向另一個對象,就會報錯
example= []; // Uncaught TypeError: Assignment to constant variable
3. 說明
本人初學者,這是自己學習筆記,如有問題,請及時指出!郵箱:[email protected]