1. 程式人生 > >es6宣告物件以及作用域與es5對比

es6宣告物件以及作用域與es5對比

es6宣告變數:

let x=1;//宣告一個變數

const y=2;//宣告一個只讀常量,宣告時必須賦值,之後值不可修改

es5宣告變數:

var z=3;//宣告一個變數

區別:

  let不存在變數提升,而var存在

ps:變數提升---先解析程式碼,獲取所有宣告的變數,然後程式碼自上而下依次執行,這將導致指令碼還未執行,而變數卻存在,只不過變數的值為undefined。

var num=2;
function fun() {
  console.log(num);//undefined    
  if(false){
     var num=3;
    console.log(num);
//程式碼不執行 } }

從上面程式碼可以看出,即使if語句不執行,但是num卻依然聲明瞭。

 

作用域:ps:變數能夠起作用的範圍

   在es5中只有全域性作用域和函式作用域,而es6中新增了一個塊級作用域

var arr="love";//全域性作用域下的全域性變數
function foo() {
 var arr="you";//函式作用域下的區域性變數
}
foo();

{
   let num=.....;//塊級作用域寫法
    ........
}

 

*.在某個作用域中用let宣告區域性變數時,該作用域會形成封閉作用域,即在變數宣告之前,該變數不可使用,並且不允許在相同的作用域下重複宣告同一個變數.

var tmp="234";
{
    tmp=345;//報錯
    let tmp="567";//在宣告變數之前不可使用,區域已封閉
}

 

let garde=88;
let grade=79;//報錯
let num=110;
{
   let num=99;
   console.log(num);//99
}
console.log(num);//110

從上面的程式碼可以看出用let宣告的變數綁定了自己所在的作用域,互不影響.