###### tags: `六角JS 直播班 - 2021 秋季班` var、let、const 的差異? === # var var可以重複宣告,相較於let較不嚴謹,未來若程式碼一多可能會導致程式碼難以維護。 在作用域內宣告的var,在作用域內才有作用,如果是在function外宣告的var,則會被視為全域變數。 <br> >### var可能有的副作用 - **只存在在特定區塊中** ```javascript= function func (){ var a =1; console.log(a); //1 } func() console.log(a) //在外層抓不到在函式func內名稱為a的var變數 Uncaught ReferenceError: a is not defined ``` - **可以被重複宣告,也可以被重新賦予值** ```javascript= #example1 var a = 1; var a = 2; console.log(a); //2 第一個var變數會被第二個覆蓋掉 #example2 var a = 1 function func (){ var a = 2; console.log(a); //2 } func(); console.log(a); //1 //有兩個相同名稱的var變數卻不會報錯,雖然名稱相同但被視為兩個完全不同的變數 ``` - **循環變數洩漏為全域變數** ```javascript= var i = 10 for(var i = 0; i<5; i++){ console.log(i); //0 1 2 3 4 } console.log(i); //應為10,卻印出5 ``` - **離開作用域,在外層仍可取出值** ```javascript= for (var i=0; i<5; i++){ console.log(i); //0 1 2 3 4 } console.log(i); //5 ``` # let 在ES6後取代var,為較嚴謹的宣告方式。 const 可不可以修改? A1:基礎型別不行,但物件型別可以。 B1:const 僅限制無法修改 `value`(無法重新賦予值),但可以修改 `reference` 原物件的值。 Q2:如何讓 reference 不能被修改? A2:使用 freeze(),防止 const 的 property 被更動。 >### let的特性 - **僅能宣告一次,且可以被重新賦予值** ```javascript= let a = 1 let a =2 console.log(a) // 不能重複宣告 Uncaught SyntaxError: Identifier 'a' has already been declared ``` ```javascript= let a = 1 a=2 console.log(a) // 2 可以被重新賦予值,不需要再宣告一次 ``` - **離開作用域,外層無法取出值** ```javascript= for (let i=0; i<5; i++){ console.log(i); //0 1 2 3 4 } console.log(i); //Uncaught ReferenceError: i is not defined ``` # const 同為較嚴謹的宣告方式,需初始化,不可重複宣告,用來宣告不易變動的值。 >### const的特性 - **需初始化** ```javascript= const a; a=1 console.log(a); //Uncaught SyntaxError: Missing initializer in const declaration ``` - **僅能宣告一次,不可被重新賦予值** ```javascript= const a = 1; const a = 2; console.log(a); //Uncaught SyntaxError: Identifier 'a' has already been declared ``` ```javascript= const a = 1; a = 2; console.log(a); // Uncaught TypeError: Assignment to constant variable. ``` <br> >**參考資料:** >[JavaScript: var, let, const 差異](https://totoroliu.medium.com/javascript-var-let-const-%E5%B7%AE%E7%95%B0-e3d930521230) >[JavaScript 那個 let, const, var 到底差在哪?](https://www.youtube.com/watch?v=FGdKdn_CnWo)
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up