ES6定義變數

2021-09-11 08:42:55 字數 2146 閱讀 1729

一、let命令

不存在變數提公升。es5的var會存在變數提公升問題,但是es6的letconst不會存在變數提公升問題。

暫時性死區。只要在塊級作用域內存在let命令,它所宣告的變數就繫結在這個區域,不再受外部的影響。es6明確規定,如果區塊中存在letconst命令,這個區塊對這些命令宣告的變數,從一開始就形成了封閉作用域,凡是在宣告之前就使用這些變數,就會報錯。即使是使用typeof也會報錯。

var tmp =

123;if(

true

)

不允許重複宣告。letconst不允許在相同的作用域內,重複宣告同乙個變數。

// 報錯

function

func()

// 報錯

function

func()

//不能在函式內部重新宣告引數

function

func

(arg)

function

func

(arg)

}

二、塊級作用域

es5只有全域性作用域和函式作用域,沒有塊級作用域。這可能導致很多不合理的場景。

//內層變數可能會覆蓋外層變數

var tmp =

123;

functionf(

)}f(

);// undefined

//用來計數的迴圈變數洩露為全域性變數

var s =

'hello'

;for

(var i =

0; i < s.length; i++

)console.

log(i)

;// 5

es6的塊級作用域

functionf1(

) console.

log(n)

;// 5

}

es6允許塊級作用域的任意巢狀,塊級作用域的出現,使得廣泛應用的立即執行函式表示式(iife)不再必要,塊級作用域不返回值,除非它是全域性變數。

// iife 寫法

(function()

());

// 塊級作用域寫法

三、const命令

const宣告乙個唯讀的常量,一旦宣告,常量的值就不能改變。

const一旦宣告變數,就必須立即初始化,不能留到以後賦值。

const限定的是賦值行為。

const a =1;

a =2

;//報錯

const arr =

;arr.

push(1

)//[1]

//在宣告引用型資料為常量時,const儲存的是變數的指標,只要保證指標不變就不會儲存。下面的行為就會報錯

arr =

;//報錯 因為是賦值行為。變數arr儲存的指標改變了。

四、頂層物件屬性與全域性變數

頂層物件,在瀏覽器環境指的是window物件,在 node 指的是global物件。es5 之中,頂層物件的屬性與全域性變數是等價的。

window.a =1;

a // 1

a =2

;window.a // 2

es6中引入的letconstclass宣告的全域性變數不再屬於頂層物件的屬性。但是varfunction宣告的變數依然屬於全域性物件的屬性。

var a =1;

window.a // 1

let b =1;

window.b // undefined

es6變數定義和賦值

ecmascript 第六個版本 在es6之前,都是用 var宣告,但是它會變數提公升成為全域性變數。functiona else 其實是這樣的 functiona else undefined 無論bool的值是true 或 false,b 都會被建立宣告。改寫成let function a el...

es6 定義靜態類 es6中靜態變數

最近剛看react,什麼是靜態方法不太懂,就我目前所理解的說一下,如有不對望不吝賜教 首先說一下react的單向資料流。呼叫了hello這個元件,跟普通的函式呼叫差不多,name jhon 是它的實參,在定義hello元件這裡 class hello extends react.component ...

ES6變數命名

let const 宣告變數和常量 區別於var 1.作用域只限制於當前的 塊中 console.log second console.log first 報錯 first is not defined 2.使用let宣告的變數,不存在變數提公升 3.乙個變數名,相同作用域下 不能重複宣告變數 4....