首先了解下let與var的區別,主要有以下3點:
1、var在js中是支援預解析的,而let不支援預解析,也就是變數提公升的區別
console.log(a)2、var可以重複定義同乙個變數,但是let不可以var a = 22;
// 列印undefined
console.log(b)
let b = 22
// 報錯:b is not defined
var a = 100;3、let可以形成塊級作用域,在es6之前js只有函式作用域,沒有塊級作用域。var a = 200;
console.log(a)
// 200
let a = 100;
let a = 200;
console.log(a)
// 報錯:identifier 'a' has already been declared
在es6之前我們是怎麼實現塊級作用域的呢?有朋友已經猜到了,立即執行函式表示式,簡稱iiff。
(function () )()可以看到通過乙個立即執行函式表示式,我們實現了乙個區域性作用域或者塊級作用域,但是有了let之後就不需要寫這樣的**了,只需要乙個大括號內即實現塊級作用域。console.log(aa)
// 報錯:aa is not defined
console.log(bb)4、var定義的全域性變數會掛載到window物件上,使用window可以訪問,let定義的全域性變數則不會掛載到window物件上// 報錯:bb is not defined
var f = 200;下面談一下const的區別,以上四點完全適用const,但是const與let或是var還有兩點不同window.f
// 200
let g = 200;
window.g
// undefined
1、const是用來定義常量的,常量定義之後是不允許改變的。
const aa = 200;錯誤提示為:uncaught typeerror: assignment to constant variable.意思是常量已經賦值了。aa = 100;
// 報錯:assignment to constant variable.
這裡有乙個小坑,看如下**:
const bb = {}結果列印:,沒有報錯,並且賦值成功。bb.a = 200
console.log(bb)
為什麼 ?因為bb的值並沒有改變,依然指向剛開始賦值的那個物件,並沒有重新賦值,如果將bb重新賦值,就會報錯了,大家可以試試。其實就是引用變數與普通變數的區別。
所以用const定義的常量只要是引用型別資料,改變這個引用型別資料的結構或屬性,都是允許的。引用型別包括哪些呢?陣列和物件。
2、用const定義常量必須賦值。不賦值的話,沒有任何意思,所以報錯。
const cc// 報錯:missing initializer in const declaration
ES6新增 let const var的區別
var定義的變數,沒有塊的概念,可以跨塊訪問,不能跨函式訪問。let定義的變數,只能在塊作用域裡訪問,不能跨塊訪問,也不能跨函式訪問。const用來定義常量,使用時必須初始化 即必須賦值 只能在塊作用域裡訪問,而且不能修改。es6的let變數宣告特點 1.擁有塊級作用域 2.沒有變數宣告提公升 3....
ES6的宣告 let,const,var區別
a 報錯 referenceerror a is not definedlet 是在 塊內有效,var 是在全域性範圍內有效 a referenceerror a is not defined b 1let a 1 let a 2 var b 3 var b 4 a identifier a has...
es6的let,const,var的知識
1 js引擎在掃瞄 發現變數宣告時,要麼把他們提公升到作用域頂部 遇到var宣告 要麼把他們放到tdz 臨時死區 中 遇到let const宣告 訪問tdz裡面的變數會觸發執行時錯誤,只有執行變數宣告語句後,變數才會從tdz中移出,然後才能正常訪問。if 1 console.log typeof v...