在es5中沒有塊級作用域,只有函式作用域和全域性作用域,例如不能成為乙個作用域,但在es6中可以
for(var i=0;i<4;i++)
{}console.log('i:',i);//4
這是因為i是在全域性的,最後列印的是for迴圈裡面最後的結果。用let替換var則結果為not defined。
for(let i=0;i<4;i++)console.log('i:',i);//i
isnot defined
這是因為let形成了乙個塊級作用域
2. let、const沒有變數提公升
先來看看var 變數提公升的乙個小例子
console.log(a);
var a=0;
}f();//
undefined```這段**在執行順序為```function f()
f();//
undefined```如果用let,則結果為```function f()
f();//is not defined
注意undefined跟is no defined是不同的,undefined是乙個類,在這裡表示變數有定義但沒有賦值,而後者則意味沒有定義變數。
3. 暫時性死區
var a=0;
functionf()
f();//a is not defined
先定義了var變數,後面再在函式中let變數,形成了塊作用域,由於變數名相同,所有會導致var失效
4. 不能重複定義
let a;
let a;
}//報錯
const類似
5. let塊級寫法可以代替立即執行匿名函式
let config;
//[ 1, 2 ]
6.在es6中函式不被提公升,這部分到函式部分再一起來分析。
7. 乙個簡單的例子let實現閉包的效果
var arr=;
function
f());
}}f();
arr[1]();//5
arr[2]();//5
arr[3]();//5
這段**總是列印出5,現在使用閉包使其輸出0~4
var arr=;
functionf()
})(i));
}} f();
arr[0]();//0
arr[1]();//1
arr[2]();//2
將第一段**的for迴圈中的var改為let,即可實現第二段**的效果。
8. const定義常量後不能再被修改
const a=0;
functionf()
f();
//報錯
那麼現在來看看這段**
const a=0;
functionf()
f();
//報錯
咦,這裡為什麼有可以修改呢?請注意,這裡指的不能修改是指不能修改變數的位址,也即使位址指標。如果要徹底是其不能修改,那可以用freeze();方法凍結它。在原來的**上新增
object.freeze(a);
a.***='girl';
則會報錯can』t add property ***, object is not extensible。接下來會有一系列筆記,相信自己詳細內容會整理的更加的詳細。題外話:本人也是es6初學,沒有太多的經驗,寫部落格純屬是為了這裡自己的筆記和一些想法,若有哪位仁兄仁姐看了本人文章,歡迎指點。 ES6 新增關鍵字let const
1 es6中新增的let關鍵字 之前我們宣告乙個變數時,都是使用關鍵字var,那新增加的let和var有什麼不同呢?var的不足之處一 var arr for vari 0 i 10 i arr 8 console.log i 的結果為 10 同樣的換成 let之後就沒問題 var arr for ...
ES6 之關鍵字 let
正如大家都熟悉的,我們平時在寫 的時候,用var 宣告乙個變數,除此之外,也再沒有接觸到其它的關鍵字了,不管我們宣告什麼樣型別得變數,都用var 搞定了,很方便,但是es6 告訴你,除了var,還可以試試 let 來宣告變數。那麼,既然var 方便,為什麼還要let 來宣告,這麼說 var 宣告 一...
ES6之關鍵字const
const是constant 常量 的縮寫,const和 let一樣,也是用來宣告變數的,但是const是專門用於宣告乙個常量的,顧名思義,常量的值是不可改變的。const的特點 1 不可更改 1 2 const name 張三 name 李四 錯誤,企圖修改常量name 2 只在塊級作用域起作用,...