let、const、var的差別 === <br> ### 為什麼不建議使用var :::warning 因為var是全域變數。在使用上容易造成**作用域內或外相互使用上的污染**。 ::: 在for迴圈,不管在==迴圈內的作用域==,或是==迴圈作用域以外==都能取到變數```i```的值。 ```javascript= for( var i = 0; i < 10; i++){ console.log(i); } console.log(i); ``` <br> 在==判斷式作用域==內宣告的變數```name```,在作用域外一樣能取得。 ```javascript= var answer = ture; if(answer) { var name = '姓名'; console.log(name); } console.log(name); ``` <br> 要限制var的作用域,在外層加上==立即函式==。這樣==外層就無法取得==立即函式內的變數i的值。 ```javascript= (function() { for( var i = 0; i < 10; i++){ console.log(i); } }()); console.log(i); ``` <br> ### let的特性 - let宣告後==可以重新賦值==,是**能被修改**的。 ```javascript= let name = '小明'; name = '小華'; console.log(name); //小華 ``` - 在同一個作用域,let==無法重複==宣告。==避免同一個作用域下重複做宣告==。 ```javascript= let name = '小明'; let name = '小華'; ``` :::danger #### let的作用域與var的作用域有什麼不同 - var的作用域是==函式作用域==。 - let的作用域是==block區塊作用域==。**block就是大括號{}**。 <br> 在第四行let name的作用域,只有在**大括號**內。 所以不同作用域取的同一個變數,有不同的值。 ```javascript= let name = 'john'; { let name = 'joe' console.log(name); //joe } console.log(name); //john ``` ::: <br> ### const的特性 - const宣告後==不可以重新賦值==,是**無法被修改**的。 - const跟let一樣是==無法重複宣告==的,**避免同一個作用域下重複做宣告**。 - 用在**不可修改**的地方,例如網址、或不可修改的值。 :::success `string`、`boolean`、`number`、`undefined`、`null`是屬於『基本型別』 基本型別只『傳值』 ::: 所以`const`用在`string`、`boolean`、`number`、`undefined`、`null` 不能重新指派值。 ```javascript= const name = 'cool'; name = 'cold'; //不可重新指派值 console.log(a); ``` <br> :::success `array`、`object`是屬於『物件型別』,物件型別只『傳參考』 ::: `const`用在`array`、`object` 是==可以修改index、屬性值的==,但**不能重新指派值**。 ```javascript= const a = {name:'big'}; const b = [1,2,3,4]; a.name = 'small'; //可修改屬性值 a = {name:'small'}; //但不可重新指派值 b[0] = 5; //可修改item值 b = [5,2,3,4]; //但不可重新指派值 console.log(a); console.log(b); ```
{"metaMigratedAt":"2023-06-17T09:48:30.623Z","metaMigratedFrom":"YAML","title":"let、const、var的差別","breaks":true,"contributors":"[{\"id\":\"c22ceebd-b591-439f-9389-ad85341a1423\",\"add\":2223,\"del\":325}]"}
Expand menu