๐ JS์ ๋ณ์ ์ ์ธ
๋๋ฌด ๊ธฐ๋ณธ์ ์ธ JS ๊ธฐ์ด์ง๋ง ํท๊ฐ๋ฆฌ๋ ๊ฒฝ์ฐ๋ ์์ผ๋ ์์ฑํด๋ณธ๋ค.
์ฐ์ ๋ณ์ ์ ์ธ ๋ถํฐ ์์๋ณด์
๋ณ์ ์ ์ธ?
- ๊ฐ์ ์ ์ฅํ๊ธฐ ์ํด ์ด๋ฆ์ ๋ง๋ค๊ณ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ํ๋ณดํ๋ ๊ฒ์ด๋ค
- JS์ ๋ณ์ ์ ์ธ ๋ฐฉ๋ฒ์ผ๋ก๋ var, let, const 3๊ฐ์ง ๋ฐฉ๋ฒ์ด ์๋ค
var, let, const์ ์ฐจ์ด์ ์ ์์๋ณด๊ธฐ ์ ์ ์ฌ์ ์ธ, ์ฌํ ๋น, ํธ์ด์คํ ์ด๋ผ๋ ์ฉ์ด์ ๋ํด ๋จผ์ ์์๋ณผ ํ์๊ฐ ์๋ค.
์ฌ์ ์ธ
- ์ด๋ฏธ ์กด์ฌํ๋ ๋ณ์๋ฅผ ๊ฐ์ ์ด๋ฆ์ผ๋ก ๋ค์ ์ ์ธํ๋ ๊ฒ
var x = 1; var x = 2;์ฌํ ๋น
- ์ด๋ฏธ ์ ์ธ๋ ๋ณ์์ ์๋ก์ด ๊ฐ์ ๋ค์ ๋ฃ๋ ๊ฒ
var y = 1; y = 2;ํธ์ด์คํ
- ๋ณ์ ์ ์ธ์ ์ฝ๋ ๋งจ ์๋ก ๋์ด์ฌ๋ฆฐ ๊ฒ์ฒ๋ผ ์ฒ๋ฆฌํ๋ JS ๋์
- ์ฝ๊ฒ ์ค๋ช ํ๋ฉด ์ํ ๋ณด๊ธฐ์ ์ ์ด๋ฆ์ ๋จผ์ ์ ๊ณ ๋ฌธ์ ๋ฅผ ๋์ค์ ํธ๋๊ฒ๊ณผ ๊ฐ๋ค
console.log(x);
var x = 5;
// ์ด๋ฐ์์ผ๋ก ์ง๋ ์๋ฌ๊ฐ ๋์ง ์๋๋ฐ JS์์ง์ ์ด ์ฝ๋๋ฅผ ์๋์ ๊ฐ์ด ํด์ํ๊ธฐ ๋๋ฌธ์ด๋ค
var x; // ์ ์ธ ๋จผ์
console.log(x); // undefined
x = 5; // ๊ฐ ํ ๋น
์ด๊ฒ ๋ฐ๋ก ํธ์ด์คํ
์ด๋ค!
๋ค์์ var, let, const์ ์ฐจ์ด์ ์ด๋ค
var
- ํจ์ ์ค์ฝํ
- ๋ณ์๋ฅผ ์ ์ธํ๋ฉด ํจ์ ์์์๋ ๋ค ์ ๊ทผํ ์ ์์ (๋ธ๋ก ๋ฌด์)
if (true) { var x = 10; } console.log(x); // 10
- ๋ณ์๋ฅผ ์ ์ธํ๋ฉด ํจ์ ์์์๋ ๋ค ์ ๊ทผํ ์ ์์ (๋ธ๋ก ๋ฌด์)
- ์ฌ์ ์ธ ๊ฐ๋ฅ
var x = 10; var x = 20; console.log(x); // 20 - ์ฌํ ๋น ๊ฐ๋ฅ
var n = 5; n = 10; console.log(n); // 10// ํ์ ๋ํ ์์ ๋กญ๊ฒ ๋ณ๊ฒฝ ๊ฐ๋ฅ var value = 1; value = "hello"; value = true; console.log(value); // true - ํธ์ด์คํ
- ์ ์ธ + undefined ์ด๊ธฐํ๊น์ง ํธ์ด์คํ
console.log(v); // undefined var v = 5; - ์ ์ธ ์ ์ ์ฌ์ฉํด๋ ์ค๋ฅ๊ฐ ์๋์ง๋ง ๋ฒ๊ทธ๊ฐ ์กฐ์ฉํ(undefined)์จ์ด๋ฒ๋ฆผ -> ์ํ, ๋๋ฒ๊น ์ ์ด๋ ค์
- ํจ์ ํํ์์ ํธ์ด์คํ
add(2,3); // TypeError var add = function (a,b) { return a + b; }- var๋ ํธ์ด์คํ ์ ๋์ง๋ง ์ด๋ฐ์์ผ๋ก ํจ์ ์์ ์ ์ผ๋ฉด undefined๊ธฐ ๋๋ฌธ์ ์๋ฌ๊ฐ ๋๋ค
- ์ ์ธ + undefined ์ด๊ธฐํ๊น์ง ํธ์ด์คํ
let
- ๋ธ๋ก ์ค์ฝํ
- {}์์์๋ง ์ ํจ
if (true) { let y = 10; } console.log(y); // ReferenceError
- {}์์์๋ง ์ ํจ
- ์ฌ์ ์ธ ๋ถ๊ฐ๋ฅ
let x = 10; let x = 20; // ์๋ฌ - ์ฌํ ๋น ๊ฐ๋ฅ
let n = 5; n = 10; console.log(n); // 10// ํ์ ๋ํ ์์ ๋กญ๊ฒ ๋ณ๊ฒฝ ๊ฐ๋ฅ let value = 1; value = "hello"; value = true; console.log(value); // true - ํธ์ด์คํ
- ์ ์ธ ๋ง ํธ์ด์คํ
console.log(l); // ReferenceError let l = 5; - ์ ์ธ์ด ํธ์ด์คํ ๋์ง๋ง ์ด๊ธฐํ ์ ๊น์ง๋ TDZ(Temporal Dead Zone)์ผ๋ก ์ ๊ทผ ์ ์๋ฌ ๋ฐ์ -> ๋๋ฒ๊น ์ฌ์ (์ฆ์ ์๋ฌ)
- ์ ์ธ ๋ง ํธ์ด์คํ
const
- ๋ธ๋ก ์ค์ฝํ
- {}์์์๋ง ์ ํจ
if (true) { const y = 10; } console.log(y); // ReferenceError
- {}์์์๋ง ์ ํจ
- ์ฌ์ ์ธ ๋ถ๊ฐ๋ฅ
const x = 10; const x = 20; // ์๋ฌ - ์ฌํ ๋น ๋ถ๊ฐ๋ฅ
const n = 5; n = 10; // ์๋ฌ - ํธ์ด์คํ
- ์ ์ธ ๋ง ํธ์ด์คํ
(let๊ณผ ๋์ผ)
console.log(l); // ReferenceError const l = 5; - ์ ์ธ์ด ํธ์ด์คํ ๋์ง๋ง ์ด๊ธฐํ ์ ๊น์ง๋ TDZ(Temporal Dead Zone)์ผ๋ก ์ ๊ทผ ์ ์๋ฌ ๋ฐ์ -> ๋๋ฒ๊น ์ฌ์ (์ฆ์ ์๋ฌ)
- ์ ์ธ ๋ง ํธ์ด์คํ
(let๊ณผ ๋์ผ)
๋ง๋ฌด๋ฆฌ
var, let๊ณผ ๋ฌ๋ฆฌ const๋ ์ฌ์ ์ธ๋ ์ฌํ ๋น๋ ์๋๋๋ฐ ๊ทธ๋ผ ์ ์ฌ์ฉํ ๊น? ๋ผ๋ ์๋ฌธ์ด ์๊ฒผ๋ค.
ํ์ง๋ง ๋ฐ๋๋ก ์๊ฐํ๋ฉด const๋ ์๋ํ์ง ์์ ๋ณ๊ฒฝ์ ์ปดํ์ผ ๋จ๊ณ์์ ๋ง๊ธฐ ์ํด ์ฌ์ฉํ๋ค๋ผ๋ ๊ฒ์ ์ ์ ์๋ค. ์ฆ ์ ํ์ด ๋ง์ ์๋ก ์์ ํ๋ค๋ ๋ป์ด๋ค.
๋ฐ๋๋ก var๋ ์ฌ์ ์ธ๋ ์ฌํ ๋น๋ ๋ชจ๋ ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ ์ฝ๋๊ฐ ์ปค์ง์๋ก ๋ณ์์ ๋ณ๊ฒฝ ํ๋ฆ์ ์ถ์ ํ๊ธฐ ์ด๋ ค์์ง๋ค.
์ด๋ฌํ ํน์ฑ์ ๋๋ฒ๊น
์ ์ด๋ ต๊ฒ ๋ง๋ค๊ณ , ํ์
ํ๊ฒฝ์์๋ ์น๋ช
์ ์ธ ๋ฒ๊ทธ๋ก ์ด์ด์ง ๊ฐ๋ฅ์ฑ์ด ํฌ๋ค. (๊ทธ๋ฌ๋ฏ๋ก ์ฌ์ฉ ๊ถ์ฅ x)
let์ ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ์ผ๋ถ ํด๊ฒฐํด ์ฌ์ ์ธ์ ๋ง๊ณ ๋ธ๋ก ์ค์ฝํ๋ฅผ ์ ๊ณตํ์ง๋ง, ์ฌ์ ํ ์ฌํ ๋น์ ํ์ฉํ๋ค.
๋ฐ๋ผ์ ๊ฐ์ด ๋ณ๊ฒฝ๋์ด์ผ ํ๋์ง, ์๋๋ฉด ์ค์๋ก ๋ณ๊ฒฝ๋ ๊ฒ์ธ์ง ์ฝ๋๋ฅผ ์ฝ๋ ์ฌ๋์ด ๋งค๋ฒ ํ๋จํด์ผ ํ๋ค๋ ํ๊ณ๊ฐ ์๋ค.