這里簡單的羅嗦一下 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的值了,這點要搞清楚, 其實這個和 變量的基本類型,引用類型 原理是一樣的