--- title: let、const的實戰運用 tags: let, const, description: --- let、const的實戰運用 --- ### let setTimeout是==非同步執行程式==。 非同步事件會==先放在==事件儲列,等所有程式碼==都執行完之後,才來執行==。 ```javascript= for (var i = 0; i < 5; i++) { setTimeout(() => { console.log(`是第${i}次執行`); }, 100); } ``` ![](https://i.imgur.com/KPExPrX.png) `setTimeOut`作用域在`for迴圈`內,但是`var i`作用域是在全域。 等到`for迴圈`運行結束後,==才取到全域變數```i```的值==,而不是for迴圈當下運行的```i```。 <br> <br> 把```var```改成```let```後,```i```不是全域變數,==作用域被限制在block大括號內==, 因此setTimeOut便==可依序取得i的值==。 ```javascript= for (let i = 0; i < 5; i++) { setTimeout(() => { console.log(`是第${i}次執行`); }, 100); } ``` --- ### const 因為物件是==傳參考==特性。 因此宣告const物件變數,只要==不替換整個物件的內容==,只修改屬性的值是沒問題的。 ```javascript= const person = { name: 'John', wallet: 500, } person.name = 'max'; ``` ![](https://i.imgur.com/gDNgqFH.png) <br> 使用```Object.freeze()```,可將==物件的屬性凍結,無法修改屬性值==。 ```javascript= const person = { name: 'John', wallet: 500, } person.name = 'max'; Object.freeze(person); person.wallet = 1000; ``` ![](https://i.imgur.com/gDNgqFH.png)