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前端教程
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM