---
# System prepended metadata

title: 小組第一周JS複習

---

## ==討論日期 : 3/13 ( 三 )==
## 💖 複習 🥰

[核心篇第一堂：變數的宣告與提升](https://hackmd.io/@hexschool/HJPpXjcGo)
<br>

### 什麼是作用域 (scope)？
- 我認為的作用域：{}
- 變數在程式中可以被存取的範圍
- 全域和區域

[Javascript 的作用域 (Scope) 與作用域鏈 (Scope Chain) 是什麼?](https://www.explainthis.io/zh-hant/swe/what-is-scope-and-scope-chain)
<br>

### var 會造成什麼樣的問題呢？
- 感染全域變數
- 全域變數會滲透到 window 物件
- 古早產物，可以重複宣告同個名稱的變數
- var 是屬於函式作用域
- 可以重複宣告，這樣會導致變數設定上混亂
- 具有提升現象

[let 和 var 在 for迴圈中的結果差異](https://medium.com/randy-chen/let-%E5%92%8C-var-%E5%9C%A8-for%E8%BF%B4%E5%9C%88%E4%B8%AD%E7%9A%84%E7%B5%90%E6%9E%9C%E5%B7%AE%E7%95%B0-54f61cdb5f48)
<br>

### 什麼是 hoisting？
- 用來形容 JavaScript 編譯階段將變數和函式的宣告存入記憶體的概念
- JavaScript 編譯階段將變數和函式的宣告存入記憶體的概念
- var let const 都有提升現象，提升現象舉個例子是函式寫在執行前執行後都可以運行，let const 有提升現象但會進入暫時性死區，導致無法在宣告前就取得變數
- var 提升：編譯時，變數宣告被提升但還不會賦值，如果提早呼叫會出現 `undefined`
    函式也會提升：所以可以在宣告前呼叫
- ![image](https://hackmd.io/_uploads/SJQwXmyAT.png)

[暫時性死區](https://suochantsao.medium.com/js%E7%AD%86%E8%A8%98%E7%B3%BB%E5%88%97-%E6%9A%AB%E6%99%82%E6%80%A7%E6%AD%BB%E5%8D%80-temporal-dead-zone-c7cad9b5cc1)
[理解ES6中的暫時死區(TDZ)](https://eddychang.me/blog/es6-tdz)
<br>

### var、let 和 const 之間的主要區別
- var 兩個主要概念 - hoisting & 函式作用域
- let 和 const 概念 - 也有 hoisting 但是是以暫時性死區呈現，兩個都是塊級作用域
- 而 let 和 const 差別則是能不能重複賦值；而 var 可以重複宣告，let、const 則不行

<hr>

## 額外分享 - 圖片怎麼找
- 圖庫有用unsplash、pexels、日本免費圖庫（https://www.photo-ac.com/）、設計師使用的圖庫（https://www.freepik.com/）
- 我有試過這個，但是不好做，容易出錯
https://designer.microsoft.com/
