์๋ฐ์คํฌ๋ฆฝํธ์ ๋ณ์๋ ์ ์ธ ๋ฐฉ์์ ๋ฐ๋ผ ์ค์ฝํ(์ ํจ ๋ฒ์)๊ฐ ๋ฌ๋ผ์ง๋๋ค.
- var : ํจ์ ์ค์ฝํ(function scope)
- let, const : ๋ธ๋ก ์ค์ฝํ(block scope)
์ฌ๊ธฐ์ "์ค์ฝํ"๋ ๊ทธ ๋ณ์๋ฅผ ์ฌ์ฉํ ์ ์๋ ์ฝ๋์ ๋ฒ์๋ฅผ ๋งํฉ๋๋ค.
ํจ์ ์ค์ฝํ๋?
var๋ก ์ ์ธ๋ ๋ณ์๋ ํจ์ ์ ์ฒด์์ ์ ํจํฉ๋๋ค.
์ฆ, if, for, { } ๊ฐ์ ๋ธ๋ก({}) ๋ด๋ถ์ ์ ์ธํด๋ ๋ธ๋ก ๋ฐ์์ ์ ๊ทผ ๊ฐ๋ฅํฉ๋๋ค.
๋ธ๋ก ์ค์ฝํ๋?
let์ด๋ const๋ ํด๋น ๋ธ๋ก({}) ์์์๋ง ์ ํจํฉ๋๋ค. ECMAScript 2015(ES6)์์ ์ถ๊ฐ๋ ๊ธฐ๋ฅ์ ๋๋ค.
์์
(1) var๋ ํจ์ ์ค์ฝํ
if (true) {
var x = 5;
}
console.log(x); // 5
- var x๋ if๋ฌธ ๋ธ๋ก {} ์์์ ์ ์ธ๋์ง๋ง,
์๋ฐ์คํฌ๋ฆฝํธ๋ ๋ธ๋ก ์ค์ฝํ๋ฅผ ์ธ์ํ์ง ์๊ณ , ํจ์ ์ ์ฒด(๋๋ ์ ์ญ)์ ์ฌ๋ฆผ(hoisting). - ๊ทธ๋์ ์ค์ ๋ก๋ ์ด๋ ๊ฒ ๋์ํฉ๋๋ค:
var x; // ์ ์ธ์ด ์๋ก ๋์ด์ฌ๋ ค์ง
if (true) {
x = 5;
}
console.log(x); // 5
(2) let์ด๋ const๋ ๋ธ๋ก ์ค์ฝํ
if (true) {
let y = 10;
}
console.log(y); // ReferenceError: y is not defined
- y๋ if ๋ธ๋ก ๋ด๋ถ์์๋ง ์กด์ฌํจ.
- ๋ธ๋ก์ด ๋๋๋ฉด y๋ ๋ฉ๋ชจ๋ฆฌ์์ ์ฌ๋ผ์ง.
- ๊ทธ๋์ ์ธ๋ถ์์ ์ ๊ทผํ๋ฉด ์๋ฌ๊ฐ ๋จ.
ํ๋์ ์ ๋ฆฌ
| ์ ์ธ ๋ฐฉ์ | ์ค์ฝํ ์ข ๋ฅ | if/for/๋ธ๋ก ์์์ ์ ํจ? | ๋ธ๋ก ๋ฐ ์ ๊ทผ ๊ฐ๋ฅ? | ๋น๊ณ |
| var | ํจ์ ์ค์ฝํ | โ (๋ธ๋ก ๋ฌด์๋จ) | โ ๊ฐ๋ฅ | ES5 ์ดํ ๋ฌธ๋ฒ |
| let | ๋ธ๋ก ์ค์ฝํ | โ | โ ๋ถ๊ฐ | ES6 ์ดํ ๋ฌธ๋ฒ |
| const | ๋ธ๋ก ์ค์ฝํ | โ | โ ๋ถ๊ฐ | ์์ (๊ฐ ์ฌํ ๋น ๋ถ๊ฐ) |
์ ์ด๋ฐ ์ค๊ณ์ผ๊น?
์๋ JS(ES5 ์ด์ )๋ ํจ์ ๋จ์ ์ธ์ด ์ค๊ณ๋ฅผ ๋ฐ๋๋ค๊ณ ํฉ๋๋ค. C๋ Java์ฒ๋ผ ๋ธ๋ก ์ค์ฝํ๋ฅผ ๊ฐ์ง ๊ฒ ์๋๋ผ,
“๋ณ์๋ ํจ์๊ฐ ๊ธฐ์ค” ์ด์๊ธฐ ๋๋ฌธ์ if๋ for ์์์ ์ ์ธํด๋ ๋ฐ์์ ์ธ ์ ์์๋ ๊ฒ ์
๋๋ค.
ES6 ์ดํ ๊ฐ๋ฐ์๋ค์ด ๋ง์ด ํท๊ฐ๋ คํด์,
ํ๋ JS์์๋ let๊ณผ const๋ก ๋ธ๋ก ์ค์ฝํ๋ฅผ ๋ช
ํํ ๊ตฌ๋ถํ๋๋ก ๋ฐ๋์์ต๋๋ค.
๊ฒฐ๋ก
var๋ ๋ธ๋ก({})์ ๋ฌด์ํ๊ณ ํจ์ ๋จ์๋ก๋ง ์ค์ฝํ๋ฅผ ๋ง๋ ๋ค.
๊ทธ๋์ if, for ์์์ ์ ์ธํด๋ ๋ฐ์์ ์ ๊ทผ ๊ฐ๋ฅํ๋ค.
๋ฐ๋ฉด let๊ณผ const๋ ๋ธ๋ก ๋จ์ ์ค์ฝํ๋ผ,
๋ธ๋ก์ด ๋๋๋ฉด ๋ณ์๋ ์ฌ๋ผ์ง๋ค.
'๐ฅ๏ธ ํ๋ก ํธ์๋ > ๐กJS, React' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| # JS - debounce() ํจ์ ์์ ์ ๋ฆฌ (0) | 2025.12.10 |
|---|---|
| # ์ด๋ฒคํธ ์์(Event Delegation) ์์ ์ดํดํ๊ธฐ (0) | 2025.11.26 |
| # jQuery๋ฅผ ํตํด Ajax ์์ฒญ ์ ์ ์ญ ๋ก๋ฉ์คํผ๋ ์ ์ด ๋ฐฉ๋ฒ (3) | 2025.10.23 |
| # Query์์ $.getJSON๊ณผ $.ajax ๋น๊ต ์ ๋ฆฌ (1) | 2025.09.22 |
| # gsap - SVG๋ก ๋ฐฐ๊ฒฝ ์ ๋๋ฉ์ด์ ๋ฃ๊ธฐ (0) | 2025.07.04 |