在es5中通常常常使用的變量有兩個級別,一個是用var聲明的全局級別的變量,另一個是函數級別是用var生命在函數內的。本文中將詳細講解我對es6中的const和let的區別。es6
let是塊級變量,只有在本身聲明的內部纔會有做用。函數
'use strict'; { var a = 12; let b = 15; { console.log(a, b)//12 15沒有問題的。 } } console.log(a,b) //12 defined a是全局變量在哪裏輸出都沒有問題,然而b是塊級變量因此只有在聲明b的內部纔會有效。
let的提高。下列代碼中證實了let沒有被提高 var 被提高了。es5
'use strict'; function fun() { // var a 至關於a提高到了這裏定義了,可是未賦值。 console.log(a, b); //undefined defined 注意a是沒有被賦值,而b是未定義,這說明a是向上提高了而b卻沒有提高。 // a = 12; a至關於在這裏賦值了、 var a = 12; let b = 'b'; } fun();
let的提高以及做用範圍。spa
'use strict'; var a = 12; function f() { console.log(a); //defined 由於在函數外部聲明瞭a,而後在函數內部又聲明瞭a,此時函數外部的a就會失效,可是函數內部的a又沒有提高的功能因此會輸出未定義; let a = 100; } f();
使用let代替匿名函數當即執行code
'use strict'; (function () { var config = []; config.push(1); config.push(2); config.push(3); console.log(config) //1, 2, 3 })(); let configs; { configs = []; configs.push(4); configs.push(5); configs.push(6); console.log(configs) //4, 5, 6 }
const是常數顧名思義,就是聲明後沒法修改的。請看下面的例子。對象
const的提高和做用範圍和let幾乎同樣,在這裏就不作過多的例了。blog
'use strict'; const a = { name: '鉛筆' }; a = 100; //此時會報錯
常量不表明因此得東西不能修改,除了a = 這個指向不能修改 a對象內部的屬性和值都是能夠修改的。io
'use strict'; const a = { name: '鉛筆' }; a.name = '黑白'; a.email = '48988840@qq.com'; console.log(a); // {name : '黑白, email : '48988840@qq.com'}
怎麼讓a和內部的東西不能修改呢?console
'use strict'; const a = { name: '鉛筆' }; Object.freeze(a); //a內部的全部屬性和值都不能修改了。 a.name = '黑白'; // 報錯 a.email = '48988840@qq.com'; // 報錯 console.log(a); // {name : '黑白, email : '48988840@qq.com'}