let,const ES6學習筆記

2021-09-29 19:36:56 字數 3272 閱讀 1861

es6新增了let命令,作用類似與var,用於 宣告變數。

let相比於var的改進之處:

一:不存在變數提公升

var存在變數提公升,即可以使用沒有宣告的變數,值為undefinedlet宣告的變數不存在變數提公升,它所宣告的變數一定要在宣告後使用,否則報錯。

//var

console.

log(demo)

;//undefined

var demo =10;

//let

console.

log(foo)

;//報錯referenceerror

let foo =

20;

二:不允許重複宣告

let不能在同一作用域內重複宣告同一變數

// 報錯

function

demo1()

//不報錯,因為不在同一作用域內

let a =3;

function

demo2()

三:塊級作用域

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

第一種場景,內層變數可能會覆蓋外層變數。

var tmp =

newdate()

;functionf(

)}f(

);// undefined

第二種場景,用來計數的迴圈變數洩露為全域性變數。

for

(var i =

0;i<

10;i++

) console.

log(i)

;//10

上面**中,變數i只用來控制迴圈,但是迴圈結束後,它並沒有消失,洩露成了全域性變數。

let新增了塊級作用域,就是乙個塊級作用域。

es6新增了const命令,用於宣告乙個唯讀的常量,該常量一旦宣告,不允許改變。

constpi=

3.14;pi

=4;//報錯--typeerror: invalid assignment to const `pi'

上面的例子說明了常量的值不允許被改變。

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

constpi;

//報錯--syntaxerror: missing = in const declaration

上面的例子說明對於const來說,只宣告不賦值,就會報錯。

const也有塊級作用域,與let類似,const宣告的常量,只在宣告所在的塊級作用域內有效。

if

(true

) console.

log(max)

;//報錯-- max is not defined

const宣告的常量也不會被提公升,所以就存在「暫時性死區」,只能在宣告之後使用。

console.

log(pi)

;//報錯--referenceerror

constpi=

3.14

;

上面的例子表明const宣告的常量不會被提公升。

const宣告的常量,與let類似,不允許在同一作用域內重複宣告(常量名相同)。

if

(true

)

const命令的本質:

const實際上保證的,並不是變數的值不得改動,而是變數指向的那個記憶體位址所儲存的資料不得改動。對於簡單型別的資料(數值、字串、布林值),值就儲存在變數指向的那個記憶體位址,因此等同於常量。但對於復合型別的資料(主要是物件和陣列),變數指向的記憶體位址,儲存的只是乙個指向實際資料的指標,const只能保證這個指標是固定的(即總是指向另乙個固定的位址),至於它指向的資料結構是不是可變的,就完全不能控制了。因此,將乙個物件宣告為常量必須非常小心。

const obj =

; obj.name =

"山竹味小芒果"

; console.

log(obj)

;//object

上面**中,常量obj儲存的是乙個位址(指標就是位址),這個位址指向乙個物件。不可變的只是這個位址,即不能把obj指向另乙個位址,但物件本身是可變的,所以依然可以為其新增新屬性。

我的理解:const定義的常量,不可以改變的是常量中儲存的值,如果是簡單的資料型別(stringbooleannumber),常量中儲存的值就是資料本身,所以資料不允許被改變。如果是復合資料型別(arrayobject),常量中儲存的值是乙個位址,所以這個位址不能被改變,陣列或物件本身可以被改變。如果使用const宣告乙個常量,該常量指向乙個物件,那麼這個常量將永遠指向這個物件。

const obj =

; obj =

;//報錯--typeerror

上面的例子,obj中儲存的是第乙個物件的位址,第二行**試圖改變obj中儲存的位址。會報錯~~~

暫時性死區:

es6 明確規定,如果區塊中存在let和const命令,這個區塊對這些命令宣告的變數,從一開始就形成了封閉作用域。凡是在宣告之前就使用這些變數,就會報錯。

總之,在**塊內,使用let命令宣告變數之前,該變數都是不可用的。這在語法上,稱為「暫時性死區」(temporal dead zone,簡稱 tdz)。

學習筆記6

第七單元 標準的輸出管道命令及for.do.done語句 1.輸出和輸出重定向 a.在i o輸出分為正確的輸出和錯誤的輸出,例如 正確的輸出 root nana pc mnt ls file1 file2 file3 file4 file5 錯誤的輸出 root nana pc mnt sadfsa...

學習筆記6

mysql 的常用命令 1.create database name 建立資料庫 create 內部命令 mysql create database 資料庫名 2.use databasename 選擇資料庫 use 內部命令 mysql use 資料庫名 3.drop database name ...

學習筆記6

php操作mysql 連線mysql伺服器 1.常量定義引數 defin 名稱 值 2.連線 conn mysql connect 伺服器位址,使用者名稱,密碼 or die 3.資料庫錯誤資訊 mysql error 選擇指定資料庫 mysql select db 資料庫名稱,資料庫連線資訊 or...