ES6中神奇的const


這里簡單的羅嗦一下 var 和 let 的區別

執行下面的代碼1:
(function() {
    console.log(name);
    let name = 'PapaerCrane';
})();


執行下面的代碼2:
(function() {
    console.log(name);
    var name = 'PapaerCrane';
})();

總結:var命令會發生“變量提升”現象,即變量可以在聲明之前使用,值為undefined。這種現象多多少少是有些奇怪的,按照一般的邏輯,變量應該在聲明語句之后才可以使用。

為了糾正這種現象,let命令改變了語法行為,它所聲明的變量一定要在聲明后使用,否則報錯:Cannot access 'name' before initialization

 

言歸正傳,我們來扯一下const,畢竟今天的豬腳就是它:

const  a = 123;
const  b = '456';
const  c = true;

上面這3中情況,a,b,c的值是不能改變的

 

const obj = {
    a:10      
}

obj.a = 20;
console.log(obj.a) // 20

是不是覺得很奇怪,const 給人的印象就是定義一個常量,
其實這個說法不嚴謹,准確的說:const 定義的變量,這個變量的值可以改動,
但是對於基本類型的數據來說,值就保存在變量指向的內存地址,所以不能改動
(就像上面的 那種 字符串,數字,布爾值)
對於復合類型的數據(主要是對象和數組),他們的值是可以改變的

 

再比如下面的這種情況:

const obj = {
    a:10      
}

obj = {
    a:20
}    

console.log(obj.a) // Identifier 'obj' has already been declared

這種情況報錯是因為,你改變了obj的內存地址,而不是改變的 obj對象里面的a的值了,這點要搞清楚,
其實這個和 變量的基本類型,引用類型 原理是一樣的

 


免責聲明!

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



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