ES6與JS的關係
es6 是js的新一套表標準,已經於2015年6月正式釋出。它的目標是使js可以編寫複雜的大型應用程式,成為企業級開發語言。 由此可見ECMAScript 是為了JavaScript制定的一套規格標準。
新增的let命令與const命令
let命令
- let命令類似於var命令,兩者的作用都是宣告變數。區別在於var宣告的變數都是作用在全域性的變數(無論在哪生命都會預設提升),
- let宣告的變數只作用於let所在的程式碼塊中。(個人理解一個全域性的變數,一個是當前作用域的變數)。
- let宣告的變數製作用在當前的作用域不會影響它包含的作用域宣告的相同變數。
例子
for(let i=0;i<3;i++){
let i = 'aaa'
console.log(i)
} // aaa aaa aaa 輸出三次
複製程式碼
- let命令不存在變數提升,在什麼作用域宣告只有在宣告這個變數之後才能使用這個變數。否則會報錯
例子
console.log(a) //Uncaught ReferenceError: a is not defined
let a = 1
複製程式碼
- 只要在塊級作用域中使用了let 命令宣告變數,變數就會繫結當前的塊級作用域不會受到外部宣告的影響
例子
var test = 123
demoFunction = e=>{
test = 456
let test;
}
demoFunction() // Uncaught ReferenceError: test is not defined
//同樣的會報錯報這個變數沒有被找到因為在變數賦值後宣告的(會形成暫時性死區)
複製程式碼
- 在同一個作用域中不要重複的宣告同一個變數會報錯的
const命令
- const 命令用來宣告一個只讀的常量,常量的值是不能改變的。一旦改變常量的值就會報錯 const宣告的常量不能改變其值,這就意味著,const常量一旦宣告之後就必須立即初始化。
例子
const aa = 123
aa = 456 //Uncaught TypeError: Assignment to constant variable.
const b //Uncaught SyntaxError: Missing initializer in const declaration
複製程式碼
- const命令與let命令相同都只是在宣告所在的塊級作用域中有效(在作用域外使用變數會報錯與let的相同)
- const命令本質上是變數只想的那個記憶體地址不能被改動。對於符合型別資料(主要是物件和陣列)而言, 變數指向的記憶體地址儲存只是一個指標,const只能保證這個指標是固定的,(指標內的資料是可以操作改變的) 因此宣告一個常量變數時要考慮清楚。
塊級作用域
es6之前沒有塊級作用域只有全域性作用域和函式作用域。這就導致了好多地方如果不注意的話變數會被新宣告的 變數覆蓋掉從而報錯。
- es6中允許了在塊級作用域中宣告函式
- 函式宣告類似於var,即宣告函式後會將函式提升到全域性作用域或函式作用域的頭部(這些只在支援es6的瀏覽器中才會生效)
- es6中宣告函式儘量寫成函式表示式的形式
例子
{
let a =’ secret ’;
let f = function () {
return a ;
}
}
複製程式碼
(暫時不對塊級作用域多做描述後面會更新對這些的理解)