ECMAScript 6之let 和 const 命令

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 規定,一個區塊對letconst命令聲明的變量,會形成了封閉作用域。凡是在聲明之前就使用這些變量,就會報錯。

{
  // 變量未聲明就使用,報錯。
  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]

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章