ES6學習-let和const

let命令javascript

ES6新增了let命令,用於聲明變量。java

1. let命令不存在變量提高安全

// ES5
console.log(a); // undefined
var a = '123';

// ES6
console.log(b); // Uncaught ReferenceError: b is not defined
var b = '123';

在ES5中若是在var聲明的變量以前引用,則該變量是undefined,而在ES6中若是在變量聲明以前應用let聲明的變量則會報錯。spa

2. let變量存在暫時性死區code

var a = '123';
if (true) {
  a = '234'; // Uncaught ReferenceError: a is not defined
  let a = '123';
}

用let聲明的變量就至關因而綁定在了這個做用域內了,這個區域內封閉了這個用let聲明的變量,因此凡是在這個區域內聲明以前使用這個變量就會出現錯誤。token

typeof a; // Uncaught SyntaxError: Invalid or unexpected token
let a = 'hello world';

這時候咱們發現,typeof就不必定是是一個安全的操做了。ip

3.let不容許重複聲明作用域

// ES5
var a = 1;
var a = 2;

// ES6
let b = 1;
let b = 2; // Uncaught SyntaxError: Identifier 'a' has already been declared

用let聲明的變量若是重複聲明,則會報錯。it

4.let塊級做用域io

// ES5
for (var i = 0; i < 5; i++) {}
console.log(i); // 5

// ES6 
for (let j = 0; j < 5; j++) {}
console.log(j); // Uncaught ReferenceError: j is not defined

let只在他聲明的那一個塊做用域內可用,因此在它的快做用域以外引用會報錯,let的塊級做用域能夠避免for循環中的i泄漏在全局做用域之中。

// ES5
(function () {
  var a ...   
}) ();

// Es6 
{
  let ... 
}

let的塊級做用域能夠代替IIFE,避免全局變量的污染問題。

 

const命令

ES6增長了const命令,用於聲明常量。一旦聲明,常量就不可改變。

const a; // Uncaught SyntaxError: Missing initializer in const declaration

對於const來講若是隻聲明不賦值的話,就會報錯。

const的其餘特性與let相同,這裏就再也不贅述。

相關文章
相關標籤/搜索