ES6 — 新增關鍵字let、const

ECMAScript 是什麼?
首先,咱們都知道JavaScript由三部分組成:ECMAScript,DOM,BOM;
其中的ECMAScript是Javascript的語法規範。
ECMAScript定義了不少東西,如:
  • 語法-----解析規則,關鍵字,語句,聲明,操做等
  • 類型-----布爾型,數字,字符串,對象等
  • 原型和繼承
  • 內置對象,函數的標準庫----------JSON, Math, 數組方法,對象方法等
瀏覽器兼容:
  目前Google和Firefox瀏覽器對ES6新特性的兼容最友好。而IE9則有問題。對於不兼容的瀏覽器,咱們能夠只用轉換工具如,babel。咱們使用nodejs的包管理工具npm來安裝babel。在咱們的js文件前先引入 browser.min.js 。
 
(1)ES6中新增的let關鍵字
以前咱們聲明一個變量時,都是使用關鍵字var,那新增長的let和var有什麼不一樣呢?
 
var的不足之處一:
var arr=[];
for (var i=0;i<10;i++){
     arr[i]=function(){
         console.log(i); 
     };
arr[8]();   // console.log(i);  的結果爲 10 
 
一樣的換成 let以後就沒問題:
var arr=[];
for (let i=0;i<10;i++){
     arr[i]=function(){
         console.log(i); 
     };
arr[8]();   // console.log(i);  的結果爲 8
 
這是因爲,原本的js是沒有塊級做用域的,用var定義i時,雖然在for循環中定義,但在執行時,依然會被提高。當執行arr[8]()時,循環已經完成,這時的i=10;因此再去執行 arr[8]()時,console.log(i),i=10;
 
而是用let定義i,i就只能存在與for循環的塊級做用域,不會被提高。
(塊,只的是 一組{}之間的部分。)
 
var的不足之處二:
也就是變量提高。var 會被提高定義;let不會。
var a=1;
(function(){
     alert(a);
     var a=2;
})();   //undefined 表示只聲明,爲賦值;
 
一樣的換作let以後:
var a=1;
(function(){
     alert(a);
     let a=2;
})();   //報錯: Uncaught ReferenceError: a is not defined(…) 
 
這是由於,用let定義後,變量a的定義不會被提高。且在塊級做用域內封閉,不會受到外界a的影響。在使用a(alert(a))時,a還沒有定義,因此報錯。所以,在使用let時,必定注意,變量要先聲明後使用。
 
使用let時注意:
注意一: 在同一塊級做用域下,不能重複聲明同一個變量。
{
     var a=1;
     let a=2;
}   //報錯
{
     let a=1;
     let a=2;
}  //報錯
 
注意二:在函數內,不能用let從新聲明函數的參數。
function say(word){
     let word='hello';
     alert(word);
}
say('hi');  //報錯
 
(2)ES6中新增的const關鍵字
const是常量(contsant)的縮寫,與let相比,const專門用來聲明一個常量。
特色:
  • 不可修改
     const name='a';
     name='b';   //報錯
  • 塊級做用域
     if(1){
          const name='a';
     }
     alert(name);  //報錯
  • 不存在變量提高,必須先聲明後使用
     if(1){
    alert(name);  //報錯
          const name='a';
     }  
  • 不可重複聲明同一個變量
     var name='a';
     const name='b';  //報錯
  • 聲明後必須賦值
     const name;   //報錯
 
注意:當常量爲一個對象時:
  const Person={'name':'a'};
  Person.name='b';
  Person.age='13';
  console.log(Person)  // {'name':b,'age':'13'};  輸出正常。
這是因爲const聲明瞭一個引用類型的常量,使用的是傳址賦值。也就是不修改地址,只修改地址中的值。
 
 
 
 
 
 
———————————————————————
參考公衆號 :web前端教程
相關文章
相關標籤/搜索