ECMAScript 6中的var,let,const

var的變量提高

console.log(a);  //輸出undefined
var a=10;

他的實際執行順序是:

var a;
console.log(a);
a=10

這就是var的變量提高

const命令的用法

const聲明的是一個只讀的常量,一旦聲明,就不可改變.javascript

const a=3.14  //聲明的常量a不可更改
//a=123   由於它聲明的常量不可更改,因此這句會報錯  // TypeError: Assignment to constant variable.
console.log(a)

const聲明的常量只在塊級有效java

if(true){
        const who="wxp"
    }
console.log(who) //who is not defined

const聲明的常量不存在變量的提高數組

console.log(a);//a is not defined
const a=3.14

const不可重複聲明常量數據結構

var msg="hello";
const msg="world" //Identifier 'msg' has already been declared

const實際上保證的,並非變量的值不得改動,而是變量指向的那個內存地址不得改動。對於簡單類型的數據(數值、字符串、布爾值),值就保存在變量指向的那個內存地址,所以等同於常量。但對於複合類型的數據(主要是對象和數組),變量指向的內存地址,保存的只是一個指針,const只能保證這個指針是固定的,至於它指向的數據結構是否是可變的,就徹底不能控制了。spa

const arr=[]  //聲明的數組保存的是指針,因此沒法保證它裏面的值是固定的。
const obj={}  //跟數組同樣都是 可變數據類型
arr.push(123)
obj.name="wxp"

console.log(arr)  //[123]
console.log(obj)  //{name:"wxp"}

若是真的想將對象凍結,應該使用Object.freeze方法。指針

 const foo=Object.freeze({});  //foo指向的是一個凍結對象,因此沒法對它添加新的屬性。
foo.age=22   //不生效,由於foo是一個凍結對象。嚴格模式時還會報錯
console.log(foo) //{}

let命令的用法

let是 JavaScript 新增了塊級做用域。跟const同樣,只對塊級有效code

   let a=10
   if(true){
        let a=5
        console.log(a) //5
    }
    console.log(a) //10

let跟const同樣不可重複聲明對象

var a=10
let a=20  //Identifier 'a' has already been declared
相關文章
相關標籤/搜索