es6之let,const關鍵字

2021-08-15 02:12:32 字數 1902 閱讀 8402

在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 只在塊級作用域起作用,...