
์ฐ๋ฆฌ๋ ์ด์ var ํค์๋์ ๋ฌธ์ ์ ์ ์๊ณ ์๋ค.
ES6๊น์ง๋ ๋ณ์๋ฅผ ์ ์ธํ ์ ์ผํ ๋ฐฉ๋ฒ์ด์์ง๋ง, ๋ค์๊ณผ ๊ฐ์ ๋ฌธ์ ์ ์ด ์์๋ค.
var์ ๋ฌธ์ ์ ์ ํด๊ฒฐํ๊ธฐ ์ํด ๋์
๋ let, const ํค์๋,
๊ทธ๋ฆฌ๊ณ ํจ์ level scope๊ฐ ์๋ block level scope ์ ๋ํด ์์๋ณด์.
๋ณ์ ์ค๋ณต ์ ์ธ์ด ๊ธ์ง๋๋ค. ๋ณ์๋ฅผ ์ค๋ณต ์ ์ธํ๋ฉด, SyntaxError ๊ฐ ๋ฐ์ํ๋ค.
block level scope๋ฅผ ๊ฐ์ง๊ธฐ ๋๋ฌธ์, ๋ชจ๋ code block ์ ์ง์ญ scope๋ก ์ธ์ ํ๋ค.
let์, ๋ณ์ ํธ์ด์คํ
์ด ๋ฐ์ํ์ง ์๋ ๊ฒ์ฒ๋ผ ๋์ํ๋ค.
var์ runtime ์ด์ ์ ์ ์ธ๊ณผ ์ด๊ธฐํ๊ฐ ํ๊บผ๋ฒ์ ์งํ๋๊ธฐ ๋๋ฌธ์ ๋ณ์ ํธ์ด์คํ
์ด ๋ฐ์ํ๋ค.
let์ ๊ฒฝ์ฐ, ์ ์ธ๊ณผ ์ด๊ธฐํ๊ฐ ๋ณ๋๋ก ์งํ๋๋ค.
์ด๊ธฐํ ๋จ๊ณ ์คํ ์ด์ ์ ๋ณ์์ ์ ๊ทผํ๋ฉด, ReferenceError๊ฐ ๋ฐ์ํ๋ค.
[scope์ ์์ ~ ์ด๊ธฐํ ์ง์ ]์์๋, ๋ณ์๋ฅผ ์ฐธ์กฐํ ์๊ฐ ์๋ค๋ ๊ฒ์ด๋ค.
์ด ๊ตฌ๊ฐ์ ์ผ์์ ์ฌ๊ฐ์ง๋ TDZ(Temporal Dead Zone)๋ผ๊ณ ํ๋ค.
๊ทธ๋ฐ๋ฐ ์ฌ์ค, ํธ์ด์คํ
์ด ๋ฐ์ํ์ง ์๋ ๊ฒ ์๋๋ค.
JavaScript๋ ES6์์ ๋์
ํ ๊ฒ๋ค์ ํฌํจํ ๋ชจ๋ ์ ์ธ๋ฌธ์ ํธ์ด์คํ
ํ๋ค.
๊ทธ๋ฌ๋ let, const, class์ ๊ฒฝ์ฐ, ํธ์ด์คํ
์ด ๋ฐ์ํ์ง ์๋ ๊ฒ์ฒ๋ผ ๋์ํ๋ค๋ ๊ฒ์ด๋ค.
let ํค์๋๋ก ์ ์ธํ ์ ์ญ๋ณ์๋, ์ ์ญ ๊ฐ์ฒด์ property์ ํฌํจ๋์ง ์๋๋ค.
์์ ์ ์ธ์ ์ํด ์ฌ์ฉํ๋ ํค์๋์ด๋ค.
(๋ฐ๋์ ์์๋ง์ ์ํ ๊ฑด ์๋๋ค)
์ ์ธ๊ณผ ์ด๊ธฐํ
const ํค์๋๋, ์ ์ธ๊ณผ ๋์์ ๋ฐ๋์ ์ด๊ธฐํ๋ฅผ ํด์ผํ๋ฉฐ, ๊ทธ๋ฌ์ง ์์ผ๋ฉด SyntaxError๊ฐ ๋ฐ์ํ๋ค.
๊ทธ๋ฆฌ๊ณ let๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก block level scope๋ฅผ ๊ฐ์ง๋ฉฐ, ๋ณ์ ํธ์ด์คํ
์ด ๋ฐ์ํ์ง ์๋ ๊ฒ์ฒ๋ผ ๋์ํ๋ค.
์ฌํ ๋น ๊ธ์ง
์์
const ํค์๋๋ฅผ ์ฌ์ฉํ๋ฉด, ์์๊ฐ ํ ๋น ํ ๊ฐ ๋ณ๊ฒฝ์ด ๋ถ๊ฐ๋ฅํ๋ค.
๊ทธ๋ฌ๋๊น ์์๋ ์ฌํ ๋น์ด ๊ธ์ง๋ ๋ณ์์ธ ๊ฒ์ด๋ค.
๊ทธ๋ฐ๋ฐ const๋ณ์์ ๊ฐ์ฒด๋ฅผ ํ ๋น์ ํ๋ค๋ฉด?
๊ฐ ๋ณ๊ฒฝ์ด ๊ฐ๋ฅํ๋ค.
๊ฐ์ฒด๋ ์ฌํ ๋น์ ํ์ง ์์๋, ์ง์ ๋ณ๊ฒฝ์ด ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ด๋ค.
์ด๋ ๋ฏ const๋ '๋ถ๋ณ'ํ์ง ์์ผ๋ฉฐ, ๊ฐ์ ์ฌํ ๋น์ด ๋ถ๊ฐ๋ฅํ ๋ฟ์ด๋ค.
๊ทธ๋์ ๋ญ ์ด๋ป๊ฒ ํด์ผํ๋! ํ๋ฉด,,,,
๊ธฐ๋ณธ์ ์ผ๋ก๋ const๋ฅผ ์ฌ์ฉํ๊ณ , ์ฌํ ๋น์ด ๊ผญ ํ์ํ ๊ฒฝ์ฐ์๋ง let์ผ๋ก ๋ฐ๊ฟ์ฃผ๋ ๊ฒ์ ๊ถ์ฅํ๋ค๊ณ ํ๋ค!