์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
- SQL
- JSP
- order by
- ๋์
- Update
- ๋์ ํ ์ด๋ธ
- DATE_FORMAT
- post๋ฐฉ์
- ํ๋ก๊ทธ๋๋จธ์ค
- ๋ฆฌ๋ ์ค
- ๋ฐฐ์ด
- ๋์ปค
- oracle
- MySQL
- ํ ์ด๋ธ
- ์ธ๋ผ์ธ๋ทฐ
- ์ปจํธ๋กค๋ฌ
- JS
- select
- ์ฝํ
- like
- ๋ช ๋ น์ด
- Ajax
- optionํ๊ทธ
- Spring
- ์๋ฐ์คํฌ๋ฆฝํธ
- ๋ณ์
- JavaScript
- ๋ฐฑํฑ
- ํจ์
- Today
- Total
bom's happy life
[JS] `var` ๊ณผ `let`์ ์ฐจ์ด์ ? + ํธ์ด์คํ (Hoisting)์ด๋? ๋ณธ๋ฌธ
[JS] `var` ๊ณผ `let`์ ์ฐจ์ด์ ? + ํธ์ด์คํ (Hoisting)์ด๋?
bompeach 2023. 6. 1. 14:05`var` ๊ณผ `let` ์ ์๋ฐ์คํฌ๋ฆฝํธ์์ ๋ณ์๋ฅผ ์ ์ธํ๋ ๋ฐ ์ฌ์ฉ๋๋ ํค์๋์ด๋ค.
์ด ๋ ํค์๋๋ ๋ช ๊ฐ์ง ์ค์ํ ์ฐจ์ด์ ์ด ์๋ค.
1. ๋ณ์์ ์ค์ฝํ :
- `var` : ํจ์ ์ค์ฝํ๋ฅผ ๊ฐ์ง๋ค. ์ฆ, ๋ณ์๋ ํจ์ ๋ด์์ ์ ์ธ๋๋ฉด ํจ์ ๋ด์์๋ง ์ ํจํ๋ค.
- `let` : ๋ธ๋ก ์ค์ฝํ๋ฅผ ๊ฐ์ง๋ค. ์ฆ, ๋ณ์๋ ํด๋น ๋ธ๋ก ๋ด์์ ์ ์ธ๋๋ฉด ๋ธ๋ก ๋ด์์๋ง ์ ํจํ๋ค.
2. ๋ณ์์ ํธ์ด์คํ :
- `var` : ๋ณ์ ์ ์ธ์ ํธ์ด์คํ ๋์ด ํ์ฌ ์ค์ฝํ์ ๋งจ ์๋ก ์ด๋ํ๋ค. ๊ทธ๋ฌ๋ฏ๋ก ์ ์ธํ๊ธฐ ์ ์ ๋ณ์๋ฅผ ์ฐธ์กฐํด๋ ์๋ฌ๊ฐ ๋ฐ์ํ์ง ์๋๋ค. ๋จ, ๊ฐ์ด ํ ๋น๋๊ธฐ ์ ์ ๋ณ์๋ฅผ ์ฌ์ฉํ๋ฉด `undefined` ๊ฐ ๋๋ค.
- `let` : ๋ณ์ ์ ์ธ๋ ํธ์ด์คํ ๋๋ค. ํ์ง๋ง ๋ธ๋ก ๋ด์์ ์ค์ ๋ณ์ ์ ์ธ๋ฌธ์ ๋๋ฌํ๊ธฐ ์ ๊น์ง๋ ๋ณ์๋ฅผ ์ฌ์ฉํ ์ ์๋ค. ๋ณ์ ์ ์ธ ์ด์ ์ ๋ณ์๋ฅผ ์ฐธ์กฐํ๋ฉด ์๋ฌ๊ฐ ๋ฐ์ํ๋ค.
3. ์ค๋ณต ์ ์ธ :
- `var` : ๊ฐ์ ์ค์ฝํ ๋ด์์ ์ค๋ณต๋ ์ด๋ฆ์ ๋ณ์๋ฅผ ์ฌ๋ฌ ๋ฒ ์ ์ธํ ์ ์๋ค. ์ด ๊ฒฝ์ฐ ๋์ค์ ์ ์ธ๋ ๋ณ์๊ฐ ์ด์ ๋ณ์๋ฅผ ๋ฎ์ด์ด๋ค.
- `let` : ๊ฐ์ ์ค์ฝํ ๋ด์์ ์ค๋ณต๋ ์ด๋ฆ์ ๋ณ์๋ฅผ ์ฌ์ ์ธํ ์ ์๋ค. ์ค๋ณต ์ ์ธ ์ ๋ฌธ๋ฒ ์๋ฌ๊ฐ ๋ฐ์ํ๋ค.
4. ์ ์ญ ๊ฐ์ฒด์์ ์ฐ๊ฒฐ :
- `var` : `var` ๋ก ์ ์ธ๋ ๋ณ์๋ ์ ์ญ ๊ฐ์ฒด(window ๊ฐ์ฒด)์ ํ๋กํผํฐ๋ก ๋ฑ๋ก๋๋ค. ์ ์ญ ๋ณ์๋ ์ ์ญ ์ค์ฝํ์์ ์ฌ์ฉํ ์ ์์ผ๋ฉฐ, `window` ๊ฐ์ฒด์ ํ๋กํผํฐ๋ก๋ ์ ๊ทผํ ์ ์๋ค.
- `let` : `let` ์ผ๋ก ์ ์ธ๋ ๋ณ์๋ฅผ ์ ์ญ ๊ฐ์ฒด์ ํ๋กํผํฐ๋ก ๋ฑ๋ก๋์ง ์๋๋ค. ๋ฐ๋ผ์ ์ ์ญ ์ค์ฝํ์์ ์ ์ธ๋ `let` ๋ณ์๋ ์ ์ญ ๊ฐ์ฒด์ ์ผ๋ถ๊ฐ ์๋๋ฉฐ, `window` ๊ฐ์ฒด๋ฅผ ํตํด ์ ๊ทผํ ์ ์๋ค.
์ผ๋ฐ์ ์ผ๋ก `let` ์ ์ฌ์ฉํ์ฌ ๋ณ์๋ฅผ ์ ์ธํ๊ณ ๋ธ๋ก ์ค์ฝํ๋ฅผ ์ ์งํ๋ ๊ฒ์ด ๊ถ์ฅ๋๋ค. `let`์ ๋ณ์์ ๋ฒ์๋ฅผ ๋ช ํํ ์ ์ํ๊ณ , ํธ์ด์คํ ์ผ๋ก ์ธํ ์ค๋ฅ๋ฅผ ์ค์ด๊ณ , ์ค๋ณต ์ ์ธ์ ๋ฐฉ์งํ ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค. ๊ทธ๋ฌ๋ ํน๋ณํ ๊ฒฝ์ฐ์๋ `var`์ ํจ์ ์ค์ฝํ๊ฐ ํ์ํ ์ํฉ์ด ์์ ์ ์๋ค.
ํธ์ด์คํ (Hoisting)์ด๋?
ํธ์ด์คํ (Hoisting)์ ์๋ฐ์คํฌ๋ฆฝํธ์์ ๋ณ์์ ํจ์ ์ ์ธ์ ํด๋น ์ค์ฝํ์ ์ต์๋จ์ผ๋ก ๋์ด์ฌ๋ฆฌ๋ ๋์ ์ ๋งํ๋ค. ์ฆ, ์ฝ๋ ๋ด์์ ๋ณ์ ๋๋ ํจ์๋ฅผ ์ ์ธํ๊ธฐ ์ ์๋ ํด๋น ์๋ณ์๋ฅผ ์ฌ์ฉํ ์ ์๋ ๊ฒ์ฒ๋ผ ๋์ํ๋ ๊ฒ์ ์๋ฏธํ๋ค.
์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ์ฝ๋๋ฅผ ์คํํ๊ธฐ ์ ์ ๋ณ์์ ํจ์ ์ ์ธ์ ๋ฉ๋ชจ๋ฆฌ์ ๋ฑ๋กํ๋ค. ์ด๋ ๋ณ์ ์ ์ธ์ ํด๋น ์ค์ฝํ์ ๋งจ ์๋ก, ํจ์ ์ ์ธ์ ์ ์ฒด ์ค์ฝํ์ ๋งจ ์๋ก ๋์ด์ฌ๋ ค์ง๋ค. ์ด๋ฌํ ๋์์ผ๋ก ์ธํด ์ ์ธ์ด ์ค์ ์ฝ๋ ์์น์ ์๊ด์์ด ๋ณ์์ ํจ์๋ฅผ ์ฌ์ฉํ ์ ์๊ฒ ๋๋ค.
์๋ฅผ ๋ค์ด, ์๋์ ์ฝ๋๋ฅผ ์ดํด๋ณด๋ฉด
console.log(x);
var x = 10;
์ค์ ๋ก๋ ๋ณ์ x ๊ฐ ์ ์ธ๋๊ธฐ ์ ์ console.log(x) ๊ฐ ํธ์ถ๋์์ผ๋ฏ๋ก undefined ๊ฐ ์ถ๋ ฅ๋์ด์ผ ํ ๊ฒ ๊ฐ์ง๋ง, ํธ์ด์คํ ์ผ๋ก ์ธํด x ๋ ์ค์ฝํ ๋งจ ์๋ก ๋์ด์ฌ๋ ค์ง๊ณ ๋ณ์ ์ ์ธ์ ์คํ๋๋ค. ๋ฐ๋ผ์ ์์ ์ฝ๋๋ ์๋์ ๊ฐ์ด ๋์ํ๋ค.
var x;
console.log(x); // undefined
x = 10;
.
.
ํจ์ ์ ์ธ๋ ํธ์ด์คํ ์ ์ํฅ์ ๋ฐ๋๋ค. ํจ์ ์ ์ธ๋ฌธ์ ์ ์ฒด ์ค์ฝํ์์ ์ต์๋จ์ผ๋ก ๋์ด์ฌ๋ ค์ง๋ฏ๋ก ํจ์๋ฅผ ์ ์ธํ๊ธฐ ์ ์ ํธ์ถํ ์ ์๋ค.
sayHello(); // "Hello"
function sayHello() {
console.log("Hello");
}
์์ ์ฝ๋์์๋ sayHello( ) ํจ์๊ฐ ์ ์ธ๋๊ธฐ ์ ์ ํธ์ถ๋์์ง๋ง, ํจ์ ์ ์ธ๋ฌธ์ ํธ์ด์คํ ์ ์ํด ์ค์ฝํ ๋งจ ์๋ก ๋์ด์ฌ๋ ค์ง๋ฏ๋ก ์ ์์ ์ผ๋ก Hello ๊ฐ ์ถ๋ ฅ๋๋ค.
ํ์ง๋ง ๋ณ์๋ ํจ์์ ํ ๋น ๋๋ ์ด๊ธฐํ๋ ํธ์ด์คํ ๋์ง ์์ผ๋ฉฐ, ์ค์ ์ฝ๋์ ์์น์์ ์์ฐจ์ ์ผ๋ก ์คํ๋๋ค. ํธ์ด์คํ ์ ์ ์ธ๋ถ๋ง ํด๋น ์ค์ฝํ์ ์ต์๋จ์ผ๋ก ๋์ด์ฌ๋ฆฌ๋ ์ญํ ์ ์ํ ํ๋ค.