es6學習筆記(二)

2022-08-10 10:09:18 字數 2633 閱讀 1880

一. let命令宣告變數

1. 用法:let宣告的變數只在所處位置的**塊內有效

//

example1.js

for(var i = 0;i<2;i++)

console.log("i="+i);

console.log("a="+a);

console.log("b="+b);

執行結果會報錯

2. 不存在變數提公升

//

example1.js

console.log(x);

console.log(y);

var x = 10;

let y = 10;

上面**,變數x由var宣告,會發生變數提公升,即指令碼執行時,變數x已存在,只是沒有值,輸出結果為undefined。變數y由let宣告,不會發生變數提公升,變數y不存在,referenceerror報錯

3. 暫時性死區

只要塊級作用域內存在let命令,它所宣告的變數就「繫結」(binding)這個區域,不再受外部的影響。因此,在**塊內,使用let命令宣告變數之前,該變數都是不可用的。這在語法上,稱為「暫時性死區」

var tmp = 123;

if (true

)

4. 不允許重複說明

//

報錯function

() //

報錯function

()

function

func(arg)

function

func(arg)

}

二. 塊級作用域

1.es5只有全域性作用域和函式作用域,沒有塊級作用域。(例如:常用的for迴圈中的計數器i在迴圈結束後,其值為最後的計數值)

2. let宣告變數為es6新增了乙個塊級作用域。外層塊無法訪問內層塊的變數。

3. 因為es6的塊級作用域,立即執行函式(iife)可由塊來代替。

//

立即執行函式

(function

())();

//塊代替立即執行函式的功能

4. es5規定函式宣告在頂層作用域或函式作用域中才是合法的,塊裡宣告在嚴格模式下會報錯。es6則允許在塊級作用域裡以let的行為宣告函式(盡量避免在塊裡使用函式宣告語句,如果需要,使用函式表示式)

//es5

報錯"use strict";

if(true

)}

//

es6不報錯

"use strict";

if(true

)}

三. do表示式(使塊級作用域有返回值)四. const命令宣告乙個唯讀的常量,宣告後值不會被改變。

1. 宣告後改變常量的值會報錯。

2. 只宣告不賦值會報錯。

3. 類似let的作用,只在塊級作用域有效、沒有變數提公升、不可重複宣告。

4. const命令宣告的複合型變數,變數名指向資料的位址,不能保證裡面的資料不變。

"use strict";

const obj =

obj.a =10;

console.log(obj);

//輸出

object.freeze()函式可以將物件凍結。

//

"use strict";

const obj =object.freeze();

obj.a =10;

console.log(obj);

//輸出,嚴格模式下會報錯

五. 頂層物件

es5中頂層物件(window)的屬性和全域性變數一致,window.a 與a是等價的,這導致了很多問題。

es6中let、const、class宣告的全域性變數都不屬於頂層變數,頂層物件的屬性逐漸與全域性變數脫鉤。

es5的頂層物件在各種實現裡不統一,瀏覽器的頂層物件是window,node的頂層物件是global,瀏覽器和web worker裡self也指向頂層物件。可以勉強使用如下方法獲取準確的頂層物件。

var top = (typeof window !== "undefined"

?window

:(typeof process === "object" && typeof require === "function" && typeof global === "object")

?global

: this

);console.log(top);

ES6學習筆記 二

function fun url,timeout 60,callback url為必須引數,其餘為可選。es5 嚴格模式下arguments物件將不會發生變化,es6中如果引數使用了預設引數,則無論是否使用嚴格模式,arguments物件都將與es5嚴格模式保持一致 物件將與命名引數分離 funct...

ES6學習筆記 二

1.set 基本用法 es6提供了新的資料結構set,它類似於陣列,但是成員的值都是唯一的,沒有重複的值 set本身是乙個建構函式,用來生成set資料結構 const s new set 2,3,5,4,5,2,2 foreach x s.add x for let i of s 2 3 5 4 上...

es6 學習筆記(二)Symbol

symbol類似於enum,可以起到識別符號的作用。主要可以應用在一下場景。1.可以作為屬性名 var mysymbol symbol var a a.mysymbol hello a mysymbol undefined a mysymbol hello 要注意symbol值作為物件屬性名時,不能...