2021. 8. 8. 01:15ใ๐ TIL
๋ณธ ํฌ์คํ ์ ์๋์ ์ง๋ฌธ์ ๋๋ตํ ์ ์๋ ๊ฐ๋ ์ ํจ์ํฉ๋๋ค.
๐๐ปโ๏ธ Q. var ๊ณผ let ์ ์ฐจ์ด๋ ๋ฌด์์ธ๊ฐ?
๐ถ A.
์ค์ฝํ์ ๊ด์ ์์, var๋ ํจ์ ๋ ๋ฒจ ์ค์ฝํ, let์ ๋ธ๋ญ ๋ ๋ฒจ ์ค์ฝํ๋ค.
์ฌ์ ์ธ์ ๊ด์ ์์, var ๋ ์ด๋ฏธ ์ ์ธํ ๋ณ์๋ฅผ ์ฌ์ ์ธ์ด ๊ฐ๋ฅํ์ง๋ง, let์ ์ฌ์ ์ธ์ด ๋ถ๊ฐ๋ฅํ๋ค. let์ ์ฌํ ๋น๋ง ๊ฐ๋ฅํ๋ค (์ ์ธ๊ณผ ํ ๋น์ ์๋ฏธ๋ฅผ ๋ช ํํ ์ดํดํ์!)
๐๐ปโ๏ธ Q. var ๊ณผ let ์ ๋ณ์ ์์ฑ ๊ณผ์ ์ ์ด๋ค ์ฐจ์ด๊ฐ ์๋๊ฐ
๐ถ A.
๋ณ์ ์์ฑ ๊ณผ์ ์๋ var / let ์ ์ฐจ์ด๊ฐ ์๋ค.
์ฐ์ ๋ณ์๋ ์ ์ธ -> ์ด๊ธฐํ -> ํ ๋น ์ ๊ณผ์ ์ ๊ฑฐ์น๋ฉฐ ์์ฑ๋๋๋ฐ,
var ์ ์ ์ธ๊ณผ ์ด๊ธฐํ ๊ณผ์ ์ด ๋์์ ์ด๋ฃจ์ด์ง๊ณ , let์ ์ ์ธ๊ณผ ์ด๊ธฐํ ๊ณผ์ ์ด ๋ถ๋ฆฌ๋์ด์๋ค.
์ฌ๊ธฐ์ ํธ์ด์คํ (hoisting) ๊ฐ๋ ์ ๊ณ๋ค์ฌ ๋ณด์.
๋ณ์ ์ ์ธ๋ฌธ ๋ณด๋ค ๋จผ์ ๋ณ์๋ฅผ ์ถ๋ ฅํ์ฌ๋(console.log(foo))) ์ฐธ์กฐ ์๋ฌ๊ฐ ๋ฐ์ํ๋ ๊ฒ์ด ์๋ undefined ๋ฅผ ์ถ๋ ฅํ๋ค( โก๏ธ undefined ๋ ์ด๊ธฐํ ๋จ๊ณ์์ ์ ์๋๋ค).
ํด๋น ์ค์ฝํ์์ var ๋ก ์ ์ธ๋ foo ๊ฐ ํธ์ด์คํ ๋์ด, ์ ์ธ๊ณผ ์ด๊ธฐํ๊ฐ ๋์์ ์ด๋ฃจ์ด ์ง๊ธฐ ๋๋ฌธ์ด๋ค.
๋ณ์๊ฐ ํ ๋น ๋จ๊ณ์ ๋๋ฌํ๋ฉด ๋น๋ก์ ํ ๋น๋ฐ์ ๊ฐ์ ์ถ๋ ฅํ ์ ์๊ฒ ๋๋ค.
console.log(foo); // undefined
var foo;
foo = 1;
console.log(foo); // 1
๋ฐ๋ฉด let ์ผ๋ก ์ ์ธ๋ ๋ณ์ foo ๋ ์ ์ธ๊ณผ ์ด๊ธฐํ๊ฐ ๋์์ ์ด๋ฃจ์ด์ง์ง ์๋๋ค.
๋ณ์ ์ ์ธ๋ฌธ ์ด์ ์ ๋ณ์์ ์ ๊ทผํด๋, ์ ์ธ ๋จ๊ณ์์ ๋ฉ๋ชจ๋ฆฌ์ ์ฐธ์กฐํ ๋ณ์๊ฐ ์๊ธฐ ๋๋ฌธ์ (foo ๋ณ์๊ฐ ์์ง ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ํ ๋น๋ฐ์ง ๋ชปํจ) ReferenceError ๊ฐ ๋ฐ์ํ๋ค.
console.log(foo); // ReferenceError: foo is not defined
let foo;
foo = 1;
๋ํ ์ฝ๋๋ผ์ธ 1์์, ๋ณ์ foo ๋ ์ผ์์ ์ฌ๊ฐ์ง๋(TDZ) ์ ์ํ๋๋ฐ, ์์ง ์ ์ธ๋, ์ด๊ธฐํ๋ ์ด๋ฃจ์ด์ง์ง ์์ ์ํ๋ฅผ ์๋ฏธํ๋ค.
๐๐ปโ๏ธ Q. ๊ทธ๋ ๋ค๋ฉด var ๊ณผ let ์ ๊ณตํต์ ์ ๋ฌด์์ธ๊ฐ?
๐ถ A.
var / let ์ ๋ณ์ ์ ์ธ์ ์ด๊ธฐ๊ฐ์ ์ฃผ์ง ์์๋ ๋๋ ๊ณตํต์ ์ด ์๋ค. (๋ฐ๋ฉด const ๋ ๋ฌด์กฐ๊ฑด ์ด๊ธฐํ๊ฐ ํ์ํ๋ค)
'๐ TIL' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
210810 ๊ฐ๋ฐ๊ธฐ๋ก: ํ๊ฒฝ๋ณ์๋ฅผ ์ฝ์ด๋ค์ด์ง ๋ชปํ ๋(feat. material UI icon) (0) | 2021.08.11 |
---|---|
210809 ๊ฐ๋ฐ๊ธฐ๋ก: ์๊ฒฉ์ ๋ธ๋์น ๋ฐ์์ค๊ธฐ (0) | 2021.08.10 |
210806 ๊ฐ๋ฐ๊ธฐ๋ก: switch(true) (0) | 2021.08.07 |
210805 ๊ฐ๋ฐ๊ธฐ๋ก: ์ ํ๊ธฐ๋ฒ๊ณผ ๊ดํธ ํ๊ธฐ๋ฒ (dot notation, bracket notaion) (0) | 2021.08.05 |
210804 ๊ฐ๋ฐ๊ธฐ๋ก: nestjs ํ ์คํธ์ฝ๋ (0) | 2021.08.04 |