ES6入門教程——3、塊級作用域和let,const,var區別

一、沒有塊作用域的ES5 var

對於ES5的var,咱們經常用到,不知道大家注意到沒有,var 變量聲明,沒有塊作用域。例1:

for(var i=0;i<=5;i++){
      console.log("hello");
}
console.log(i); //5

在if或者for循環中聲明的變量會泄露成全局變量,var i 是在塊中定義的,結果變成了全局變量。再看一個例子:例2。

var temp = new Date();
function  f(){
     console.log(temp);
     if(false){
         var temp = "hello";
    }
}
f(); //undefined

上面是什麼原因導致console.log(temp)的輸出結果爲:undefined,這個是塊內的變量覆蓋了塊外的變量,導致temp沒有定義。

二、var、let、const的區別

  1. var定義的變量,沒有塊的概念,可以跨塊訪問, 不能跨函數訪問,有變量提升。
  2. let定義的變量,只能在塊作用域裏訪問,不能跨塊訪問,也不能跨函數訪問,無變量提升,不可以重複聲明。
  3. const用來定義常量,使用時必須初始化(即必須賦值),只能在塊作用域裏訪問,而且不能修改,無變量提升,不可以重複聲明。注意:const常量,指的是常量對應的內存地址不得改變,而不是對應的值不得改變,所有把應用類型的數據設置爲常量,其內部的值是可以改變的,例如:const a={}; a.b=13;//不會報錯 const arr=[]; arr.push(123);//不會報錯
  4. let 聲明的變量只在塊級作用域內有效

'use strict';
function func(args){
    if(true){
        let i = 6;
        console.log('inside: ' + i);  //不報錯
    }
    console.log('outside: ' + i);  // 報錯 "i is not defined"
};
func();

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章