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相同,這裏就再也不贅述。