es6新增了let
命令,作用類似與var
,用於 宣告變數。
let
相比於var
的改進之處:
一:不存在變數提公升
var
存在變數提公升,即可以使用沒有宣告的變數,值為undefined
,let
宣告的變數不存在變數提公升,它所宣告的變數一定要在宣告後使用,否則報錯。
//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
定義的常量,不可以改變的是常量中儲存的值,如果是簡單的資料型別(string
,boolean
,number
),常量中儲存的值就是資料本身,所以資料不允許被改變。如果是復合資料型別(array
,object
),常量中儲存的值是乙個位址,所以這個位址不能被改變,陣列或物件本身可以被改變。如果使用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...