let和const宣告的變數只在程式碼區塊內有效
{ let a = 10; var b = 1; } a // ReferenceError: a is not defined. b // 1
不存在變數提升
變數一定要在宣告後使用,否則訊息
塊級作用域
var tmp = 123; if (true) { tmp = 'abc'; // ReferenceError let tmp; }
const命令
聲明一個只讀的常量,一旦聲明,一旦被保留下來以後賦值
let指令、const指令、class指令宣告的全域變量,不屬於全域物件的屬性// 报错 function () { let a = 10; var a = 1; }
下面再單獨向大家介紹給大家。 js總是沒有常數的概念,es6則彌補了這個缺陷;
function f() { console.log('I am outside!'); } (function () { if(false) { // 重复声明一次函数f function f() { console.log('I am inside!'); } } f(); }()); //I am inside! ES5 函数提升 //I am outside! ES6 块级作用域
var a = 1; // 如果在Node的REPL环境,可以写成global.a // 或者采用通用方法,写成this.a window.a // 1 let b = 1; window.b // undefined正常報錯,沒毛病,再看:
const foo='foo'; foo='bar';//TypeError: Assignment to constant variable.這怎麼報錯?而且還能修改成功? 這兩個例子不一樣的地方在於前者是修改了指針(需熟悉js 引用類型)對應的內容改變了,後者則不是指向依然沒變但是指向對象的內容發生改變了,對於foo而言我只是一個指標負責指向對應的物件至於物件內容是什麼就不管我的事了所以可以修改;如果不想讓內容也改變也行使用另一個方法;
const foo=[]; foo=[1];//Assignment to constant variable.這樣就不用擔心被修改了; 更多深入淺出ES6之let和const指令相關文章請關注PHP中文網!