๐ก TIL 20230826 - ์ผ์์ ์ฌ๊ฐ์ง๋ TDZ(Temporal Dead Zone)
1. ์ผ์์ ์ฌ๊ฐ์ง๋(Temporal Dead Zone)์ด๋?
TDZ ๋ ์ค์ฝํ์ ์์ ์ง์ ๋ถํฐ ์ด๊ธฐํ ์์ ์ง์ ๊น์ง์ ์ฌ๊ฐ์ง๋ ๊ตฌ๊ฐ์ ์๋ฏธํ๋ค. ์ฆ, ์ ์ธ ๋จ๊ณ์ ์ด๊ธฐํ ์ฌ์ด์ ์ ์ ๋จธ๋ฌผ๋ฌ์๋ ๊ตฌ๊ฐ์ด๋ค.
2. ๋ณ์ ์ ์ธ์ 3๋จ๊ณ
1) ์ ์ธ ๋จ๊ณ(Declaration phase)
๋ณ์๋ฅผ ์คํ ์ปจํ ์คํธ์ ๋ณ์ ๊ฐ์ฒด์ ๋ฑ๋กํ๋ค. ์ค์ฝํ๊ฐ ์ฐธ์กฐํ๋ ๋์
2) ์ด๊ธฐํ ๋จ๊ณ(Initialization phase)
์คํ ์ปจํ ์คํธ์ ์กด์ฌํ๋ ๋ณ์ ๊ฐ์ฒด์ ์ ์ธ ๋จ๊ณ์ ๋ณ์๋ฅผ ์ํ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ง๋ ๋ค. undefined๋ก ์ด๊ธฐํ๋๋ค.
3) ํ ๋น ๋จ๊ณ(Assignment phase)
์ฌ์ฉ์๊ฐ undefined๋ก ์ด๊ธฐํ๋ ๋ฉ๋ชจ๋ฆฌ์ ๋ค๋ฅธ ๊ฐ์ ํ ๋นํ๋ค.
3. var, let/const ๋ณ์์ ๋ผ์ดํ์ฌ์ดํด
1) var์ ๋ผ์ดํ์ฌ์ดํด
- var๋ ๋ณ์ ์ ์ธ ์ ์ ์ ์ธ ๋จ๊ณ์ ์ด๊ธฐํ ๋จ๊ณ๋ฅผ ๋์์ ์คํํ๋ค.
- ์ ์ธ๊ณผ ์ด๊ธฐํ๊ฐ ๋์์ ์คํ๋๊ธฐ ๋๋ฌธ์ ์คํ ์ปจํ ์คํธ ๋ณ์ ๊ฐ์ฒด๋ฅผ ๋ฑ๋กํ๊ณ ๋ฐ๋ก ๊ทธ ๋ฉ๋ชจ๋ฆฌ๋ฅผ undefined๋ก ์ด๊ธฐํํ๋ค.
- ๊ทธ๋์ ์ ์ธํ๊ธฐ๋ ์ ์ undefined๋ก ํธ์ถ์ด ๋๋ ํธ์ด์คํ ์ด ๋ฐ์ํ๋ค.
2) let/const์ ๋ผ์ดํ์ฌ์ดํด
- let๊ณผ const๋ var์๋ ๋ค๋ฅด๊ฒ ์ ์ธ๋จ๊ณ์ ์ด๊ธฐํ ๋จ๊ณ๊ฐ ๋ฐ๋ก ๋ถ๋ฆฌ๋์ด ์คํ๋๋ค.
- ๊ทธ๋์ ์ ์ธ๊ณผ ์ด๊ธฐํ ๋จ๊ณ ์ฌ์ด์์๋ ์คํ ์ปจํ ์คํธ์๋ ๋ณ์๊ฐ ๋ค์ด๊ฐ์์ง๋ง ๋ฉ๋ชจ๋ฆฌ๊ฐ ํ ๋น๋์ง ์์ ์ํ๋ผ `ReferenceError`๊ฐ ๋ฐํ๋๋ ๊ฒ์ด๋ค.
4. ๊ฒฐ๋ก
- TDZ๋ ๋ณ์๊ฐ ์ ์ธ๋๊ณ ์ด๊ธฐํ๋๊ธฐ ์ฌ์ด์ ์ฌ๊ฐ์ง๋์ด๋ค.
- var๋ ๋ณ์์ ์ ์ธ๋จ๊ณ์ ์ด๊ธฐํ๋จ๊ณ๊ฐ ๋์์ ์คํ๋์ด TDZ๊ฐ ์กด์ฌํ์ง ์๊ธฐ ๋๋ฌธ์ ํธ์ด์คํ ์ด ์ผ์ด๋๋ ๊ฒ์ด๋ค.
- ์ด๊ธฐํ ๋จ๊ณ์ ์ค๋ฉด TDZ ์ํ๊ฐ ํด์ ๋๋ค.
'โ๏ธ What I Learned > TIL' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[TIL] ๊ธฐ์ ๋ฉด์ ์ง๋ฌธ ์ ๋ฆฌ - ๋ฒ์ธ์ผ ๋/๋ฆฌ์ผ ๋, useRef (0) | 2023.08.31 |
---|---|
[TIL] react-hook-form mode (0) | 2023.08.30 |
[TIL] import { useRouter } from โnext/routerโ์ โnext/navigationโ ์ฐจ์ด (0) | 2023.08.24 |
[TIL] Prisma, Planet scale ์ ์ ๋ฐ ์ฐ๊ฒฐ ๋ฐฉ๋ฒ (0) | 2023.08.22 |
[TIL] Prisma์ ๋ํด (0) | 2023.08.20 |