
์ง๋ ํฌ์คํ ์์ ๋ณ์์ ๋ํด ๊ฐ๋ตํ ์์๋ณด์๋ค.
์ด๋ฒ ํฌ์คํ ์์๋ ๋ณ์ ์ฌ์ฉ๋ฒ์ ์์๋ณด๊ฒ ๋ค.
์ ์ธ๊ณผ ํ ๋น์ ์ด๋ป๊ฒ ์ด๋ฃจ์ด์ง๊ณ ๊ฐ ์ ์ธ์์ ๋ฐ๋ผ ์ด๋ค ํน์ง์ด ์๋์ง! ๐ ๐จ ๐จ
๋ณ์๋ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์์ ์๋ณ์๋ก์จ, ๋ฉ๋ชจ๋ฆฌ ์ฃผ์์ ๋งคํ ๊ด๊ณ๋ฅผ ๋งบ๊ณ ์๋ค. ์ฆ, ๋ณ์๋ ๊ฐ์ด ์๋๋ผ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ฅผ ๊ธฐ์ตํ๊ณ ์๋ค๋ ์๋ฏธ์ด๋ค.
๋ณ์๋ ์ ์ธ - ์ด๊ธฐํ - ํ ๋น ์ ๊ณผ์ ์ ๊ฑฐ์น๋ค.
๋ณ์๊ฐ ๊ธฐ์ตํ๋ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์์ ๊ณต๊ฐ์ ํ๋ณดํ๊ณ , ๋ณ์๋ช
๊ณผ ํ๋ณด๋ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์ฃผ์๋ฅผ ์ฐ๊ฒฐํด์ ๊ฐ์ ์ ์ฅํ ์ ์๊ฒ ์ค๋นํ๋ ๊ฒ์ด๋ค.
๋ง์ด ์ด๋ ค์ด๋ฐ, ์ฝ๊ฒ ๋งํ๋ฉด ํ ๋น๋ ๋ฉ๋ชจ๋ฆฌ ์
์ ๊ฐ์ ์ ์ฅํ๊ธฐ ์ํ ์ค๋น๋จ๊ณ์ด๋ค.
์ฆ, ํด๋น ์
์ ์ ์ฅํ ๊ฐ์ด ์๊ณ ์ด๋ ํ ๋น๋์ง ์์ ์ํ์์ ์๋ฏธํ๋ค.
๋ณ์๊ฐ ์ ์ธ๋ ์ดํ ์ต์ด๋ก ๊ฐ์ ํ ๋นํ ๊ฒ์ด๋ค. ์ ์ธ์์ ๋ฐ๋ผ ์ด๊ธฐํ๊ฐ ์๋ฌต์ ์ผ๋ก ์ด๋ค์ง์๋, ์ด๋ค์ง์ง ์์ ์๋ ์๋ค. ๋ฐ์์ ์์ธํ ์ดํด๋ณด์.
์ ์ธ ๋ฐ ์ด๊ธฐํ๋ฅผ ๊ฑฐ์น ๋ฉ๋ชจ๋ฆฌ ์ ์ ๊ฐ์ ์ ์ฅํ๋ ๊ฒ์ด๋ค.
var score=80;
์์ฒ๋ผ ์ ์ธ๊ณผ ํ ๋น์ ํ๋์ ๋ฌธ์ผ๋ก ๋จ์ถํด์ ํํํ ์ ์๋ค.
์ฃผ์ํ ์ ์ ์ ์ธ๊ณผ ํ ๋น์ด ๋์์ ์คํ๋๋ ๊ฒ์ ์๋๋ผ๋ ๊ฒ์ด๋ค.
๋ณ์ ์ ์ธ์ ๋ฐํ์ ์ด์ ์ ๋จผ์ ์คํ๋๊ณ ํ ๋น์ ๋ฐํ์์ ์คํ๋๊ธฐ ๋๋ฌธ์ด๋ค.
์ด๋ ํธ์ด์คํ
๊ณผ ์ฐ๊ด์ด ๊น์ผ๋ฏ๋ก ์ญ์ ๋ฐ์์ ์์ธํ ๋ค๋ฃจ๋๋ก ํ๊ฒ ๋ค.
var x=10; //๋ณ์ ์ ์ธ๊ณผ ๊ฐ ํ ๋น
x=30; //๊ฐ ์ฌํ ๋น
์ด๋ ต๊ฒ ์๊ฐํ ๊ฒ ์์ด ๋ณ์๊ฐ ๋ค๋ฅธ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ฅผ ํ๋ณดํ๊ณ ์
์์ ๊ฐ์ ์ ์ฅํ๋ค.
์ฆ, ์๋ก์ด ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ํ๋ณดํด ์๋กญ๊ฒ ํ ๋นํ ๊ฐ์ ์ ์ฅํ๋ ๊ฒ์ด๋ค.
์๋ ๋ฉ๋ชจ๋ฆฌ ์
์ ์ ์ฅ๋์ด ์๋ ๊ฐ๋ค์ ๊ฐ๋น์ง ์ฝ๋ ํฐ์ ์ํด ๋ฉ๋ชจ๋ฆฌ์์ ์๋ ํด์ ๋๋ค.
๋ณ์์ ์ ์ธ-์ด๊ธฐํ-ํ ๋น-(์ฌํ ๋น) ์ ์์๋ณด์๋ค.
๋ช๊ฐ์ง ์๋ฌธ์ ์ด ์๊ฒผ์ ๊ฒ์ด๋ค.
์์ปจ๋ฐ, ์ ์ธ์์ ๋ฐ๋ผ ์ด๊ธฐํ default value๊ฐ ๋ค๋ฅด๋ค๋ ์ , ์ ์ธ๊ณผ ํ ๋น์ ํ๋์ ๋ฌธ์ผ๋ก ์์ฑํ์์๋ ๋์์ ์ผ์ด๋์ง ์๋๋ค๋ ์ ์ด ๊ทธ๋ด ๊ฒ์ด๋ค.
๊ทธ ์ด์ ๋ฅผ ์์๋ณด์ ๐๐จ๐จ
ํธ์ด์คํ ์ด๋ ๋ณ์ ์ ์ธ๋ฌธ์ด ์ฝ๋์ ์ ๋๋ก ๋์ด ์ฌ๋ ค์ง ๊ฒ์ฒ๋ผ ๋์ํ๋ ์๋ฐ์คํฌ๋ฆฝํธ ๊ณ ์ ์ ํน์ง์ด๋ค.
console.log(v); // undefined
var v = 5;
console.log(v); // 5
์์ ์ฝ๋์์ ํน์ด์ ์ด ์ค์ง ์๋๊ฐ? ๋ณ์ v๊ฐ var๋ก ์ ์ธ๋๊ธฐ๋ ์ ์ ์ฝ์์ด ์์๊ฐ undefined๋ก ์ถ๋ ฅ๋๋ค.
์ด๊ฒ์ด ๋ฐ๋ก ์๋ฐ์คํฌ๋ฆฝํธ์ ํธ์ด์คํ
์ด๋ค.
์ ์ธ๋ฌธ๋ง ์ฝ๋์ ์ต์๋จ์ผ๋ก ๋์ด์ฌ๋ฆฌ๋ ๊ฒ์ด๋ค.
์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ๊ด์ ์์ ๋ณธ ์ฝ๋๋ ๋ค์๊ณผ ๊ฐ๋ค.
var v; // ์ต์๋จ์์ ์ ์ธ
console.log(v); // undefined
v = 5; //ํ ๋น๋ฌธ์ ๊ธฐ์กด ์์น
console.log(v); // 5
์ฒซ๋ฒ์งธ ์ฝ์์ ์ฃผ๋ชฉํด๋ณด์.
๊ฐ์ ํ ๋นํ์ง ์์๋๋ฐ undefined๋ผ๋ ์์๊ฐ์ด ์ถ๋ ฅ๋๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
์ด๋ var๋ก ์ ์ธํ ๋ณ์ v๊ฐ undefined๋ก ์ด๊ธฐํ๋์์์ ์์ฌํ๋ค.
๋ค๋ฅธ ์ ์ธ์๋ก ์ ์ธํ ๋ณ์์์๋ ๋์ผํ ํ์์ด ๋ฐ์ํ ๊น?
console.log(l); // ReferenceError: l is not defined
let l = 5;
console.log(l); // 5
console.log(c); // ReferenceError: c is not defined
const c = 5;
console.log(c); // 5
var๋ก ์ ์ธํ ๋ณ์์ ๋ฌ๋ฆฌ let, const๋ก ์ ์ธํ ๋ณ์๋ค์ ๊ฐ์ด ํ ๋น๋๊ธฐ ์ ์๋ Reference Error๊ฐ ๋ฐ์ํ๋ค.
์๋ฌ๊ฐ ๋ฐ์ํ์ผ๋ฏ๋ก let,const๋ ํธ์ด์คํ
์ด ๋์ง ์๋๋ค๋ ๋ป์ผ๊น? ๐ฏ
ํธ์ด์คํ
์ var, let, const, function, class ์ ๊ฐ์ ํค์๋๋ฅผ ์ฌ์ฉํ ๋ชจ๋ ์๋ณ์์์ ๋ฐ์ํ๋ค.
๋ชจ๋ ์ ์ธ๋ฌธ์ ๋ฐํ์ ์ด์ ๋จ๊ณ์์ ๋จผ์ ์คํ๋๊ธฐ ๋๋ฌธ์ด๋ค.
๊ทธ๋ ๋ค๋ฉด let, const๋ก ์ ์ธํ ๋ณ์๋ค์์๋ ์ ์๋ฌ๊ฐ ๋ฐ์ํ ๊น?
์ด์ ๋ํ ๋ต์ ์๋ฌ ๋ฉ์ธ์ง์์ ์ฐพ์ ์ ์๋ค.
Reference Error ์ฆ, ์ฐธ์กฐ ์๋ฌ๋ ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ด ๋ณ์ l, c์ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๊ฐ์ ์ฐพ์ง ๋ชปํ์์ ์๋ฏธํ๋ค.
์๋ฐ์คํฌ๋ฆฝํธ์์๋ ์ด๋ฅผ TDZ ์ํ์ ๋น ์ก๋ค๊ณ ํ๋ค.
TDZ๋ ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ์ํด ๋ณ์๊ฐ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ๊ณผ ๋งคํ์ ๋์ง๋ง ์ด๊ธฐํ๋์ง ์์ ์ ๊ทผํ ์ ์๋ ์ํ์ด๋ค. ์ ํํ๋ ์ฐธ์กฐํ ์ ์๋ ์ํฉ์ด๋ค.
var๊ณผ let,const์ ์ฐจ์ด๋ฅผ ์ฌ๊ธฐ์ ๋ฐ๊ฒฌํ ์ ์๋ค.
var์ ์ ์ธ๊ณผ ์ด๊ธฐํ๊ฐ ๋์์ ๋ฐ์ํด ๊ฐ์ ํ ๋นํ๊ธฐ ์ ์๋ undefined๋ก ์ด๊ธฐํ๋์ด์์ง๋ง
let, const๋ ์ ์ธ๊ณผ ์ด๊ธฐํ๊ฐ ๋ถ๋ฆฌ๋์ด ์งํ๋๊ธฐ ๋๋ฌธ์ ํ ๋น ์ ์๋ ์ด๊ธฐํ๋์ด์์ง ์๋ค.
์๋ฐ์คํฌ๋ฆฝํธ ์์ง ๊ด์ ์์ ๋ณธ ์ฝ๋๋ก ๋ณด๋ฉด ์ดํด๊ฐ ์ฝ๋ค.
๐ฉ๐ผโ๐ป ๊ฐ๋ฐ์ ๊ด์ ์ฝ๋
console.log(foo);
let foo;
console.log(foo);
foo=1;
console.log(foo);
โ๏ธ ์์ง ๊ด์ ์ฝ๋
let foo; // ํธ์ด์คํ
์ ์ํด ๋ณ์ ์ ์ธ์ด ์๋จ์ผ๋ก ์ฎ๊ฒจ์ง. ํ์ง๋ง ์ด๊ธฐํ๋ ์ฌ๊ธฐ์ ์ด๋ฃจ์ด์ง์ง ์์.
console.log(foo); // TDZ๋ก ์ธํด ReferenceError ๋ฐ์
// let foo; // ์ค์ ์ฝ๋ ์์ ์์น. ์ฌ๊ธฐ์ ์ด๊ธฐํ๊ฐ ์ด๋ฃจ์ด์ง (foo = undefined)
console.log(foo); // undefined. ๋ณ์ ์ ์ธ๋ฌธ์ ๋๋ฌํ์ฌ ์ด๊ธฐํ๋ ์ดํ, foo๋ undefined ๊ฐ์ ๊ฐ์ง
foo = 1; // ํ ๋น๋ฌธ์์ foo ๋ณ์์ 1์ ํ ๋น
console.log(foo); // 1. foo ๋ณ์์ ๊ฐ์ด ํ ๋น๋์ด ์์ผ๋ฏ๋ก 1์ ์ถ๋ ฅ
์ด๋ const ํค์๋๋ก ์ ์ธํ ๋ณ์๋ ๋์ผํ๋ค.
๋ค๋ง const ํค์๋๋ ๋ฐ๋์ ์ ์ธ๊ณผ ๋์์ ์ด๊ธฐํํด์ผํ๋ค.
const c; //SyntaxError : Missing initializer in const declaration
๐ ๐ป ์ด๋ฒ ํฌ์คํ ์์๋ JavaScript์ ๋ณ์ ์ ์ธ๋ถํฐ ํ ๋น๊น์ง์ ๊ณผ์ ๊ณผ ํจ๊ป ํธ์ด์คํ ๊ณผ TDZ(Temporary Dead Zone)์ ์ค์ ๊ฐ๋ ์ ์์๋ณด์๋ค. var, let, const ๊ฐ๊ฐ์ ํค์๋๋ฅผ ์ฌ์ฉํ ๋ ๋ฐ์ํ๋ ์ธ๋ฐํ ์ฐจ์ด์ ๊ณผ ๊ทธ๋ก ์ธํ ์ด๊ธฐํ ๋ฐ ํ ๋น์ ํ๋ ์์์ ๋ถ์ํ๋ค. โจ ํนํ, ํธ์ด์คํ ์ด ๋ชจ๋ ์ ์ธ์์๊ฒ ๋ฐ์ํ๋ฉฐ, let๊ณผ const์ ๊ฒฝ์ฐ ์ ์ธ๊ณผ ์ด๊ธฐํ๊ฐ ๋ถ๋ฆฌ๋์ด ์ฒ๋ฆฌ๋๋ ์ ์ ์์ง ๋ง์ ! โจ