ํธ์ด์คํ (Hoisting)
ํธ์ด์คํ ์ ์ง๋ ์๊ฐ์ ์ด์ผ๊ธฐ ํ๋ ์คํ ์ปจํ ์คํธ์ Creation Phase์์ ์ด๋ค ๋ฐฉ์์ผ๋ก ์๋ํ๋์ง์ ๋ํ ๋ฐฉ์์ธ๋ฐ, MDN์์๋ ๋ค์๊ณผ ๊ฐ์ด ๊ฒฝ๊ณ ํ๊ณ ์๋ค.
๋ณดํต ์ฌ๋๋ค์ด ํธ์ด์คํ ์ด ์ผ์ด๋๋ฉด ๋ณ์๋ ํจ์๊ฐ ์ฝ๋ ์๋จ์ผ๋ก ๋์ด์ฌ๋ ค์ง๋ค๋ผ๊ณ ํ๋๋ฐ, ์ด๋ ์๋ชป๋ ์ ๋ณด์ด๋ค.
๋ณ์๋ ํจ์ ์ฝ๋๋ ์ค์ ์์น ๊ทธ๋๋ก ์กด์ฌํ๊ณ ๊ฐ๋
์ ์ผ๋ก ์๋จ์ผ๋ก ๋์ด์ฌ๋ ค์ง๋ค๋ผ๊ณ ํํํ๋๊ฒ ์ ํํ๋ค.
Hoisting์ ์ดํดํ๋์ง ํ์ธํด๋ณด์.
MDN์์๋ ์์ ๊ฐ์ ๋ฐฉ์์ ํธ์ด์คํ ์ด๋ผ๊ณ ์์๋ฅผ ์ ์ํ๊ณ ์๋ค.
๊ทธ๋ผ ๋ค์๊ณผ ๊ฐ์ ์ํฉ์์ ๊ฐ๊ฐ์ x๋ ์ด๋ค ๋ฐฉ์์ผ๋ก ์ถ๋ ฅ๋ ์ง ์ค์ค๋ก์๊ฒ ๋๋ตํด๋ณด์.
๊ฒฐ๊ณผ๊ฐ ๋ฌด์์ผ์ง ์ฒดํฌํด๋ณด์.
- 1 undefined 2
- 1 1 2
EnvironmentRecord์ ์ํ Hoisting
EnvironmentRecord๊ฐ ์ง๋ ์๊ฐ์ ์คํ ํ๊ฒฝ์ ๋ํ ์ ๋ณด(๋ณ์, ๋งค๊ฐ๋ณ์, ํจ์)๋ฅผ ๊ตฌ์ฑํ๋ค๊ณ ์ด์ผ๊ธฐ ํ๋ค.
ํธ์ด์คํ ๋ ๋ฐ๋ก EnvironmentRecord๊ฐ ์คํ ํ๊ฒฝ์ ๋ํ ์ ๋ณด๋ฅผ ์์งํ๋ ๋จ๊ณ์ธ๋ฐ, ๊ทธ๋ผ EnvironmentRecord๊ฐ ์คํ ํ๊ฒฝ์ ๋ํด์ ๊ตฌ์ฑํ๊ธฐ ์ํด์ ํ์ํ ์ ๋ณด๋ ์์ ์ฝ๋์์ ๋ฌด์์ด ์์๊น?
function a(x)
ํจ์์ ๋งค๊ฐ ๋ณ์x = 10
์ ํด๋นํ๋var x
- ํจ์ ๋ด์ ์ ์ธ๋ ๋ณ์
var x
var x = 2
์ ํ ๋น๋ ๋ณ์var x
๊ทธ๋ผ EnvironmentRecord๊ฐ ํ์ํ ์ ๋ณด๋ฅผ ์์งํ๊ธฐ ์ํ ๋ฐฉ๋ฒ์ด ํ์ํ๋ค.
์ด ๊ฒ์ด ๋ฐ๋ก Hoisting์ด๋ผ๊ณ ํ๋ค.
๊ทธ๋ผ EnvironmentRecord๊ฐ ํ์ํ ์ ๋ณด๋ฅผ ์์งํ๊ธฐ ์ํ ๋ฐฉ๋ฒ์ ๋ฐ๋ผ ๊ฐ์ํ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ ํํ๊ฐ ๋์ฌ ๊ฒ์ด๋ค.(์ค์ ๋ก ์ด๋ ๊ฒ ๋์ํ์ง ์๋๋ค.)
function hoisting(x) {
var x; // 1๋ฒ
var x; // 2๋ฒ
var x; // 3๋ฒ
x = 1; // ๋งค๊ฐ๋ณ์
console.log(x); // 1
console.log(x); // 2
x = 2; // ๋ณ์ ํ ๋น
console.log(x); // 3
}
a(1)
๊ทธ๋ผ ์ด์ ์์์ ๋ณธ ์ฝ๋์ ๊ฒฐ๊ณผ๋ฅผ ์ ํํ ์์ธกํ ์ ์๋ค.
์ฝ์์ ํตํด์ ์ถ๋ ฅ๋ ๊ฒฐ๊ณผ์ ์ฐ๋ฆฌ๊ฐ ์์ธกํ ๊ฒฐ๊ณผ์ ๋์ผํ์ง ์์๋ณด์.
๊ฒฐ๊ณผ
๊ทธ๋ผ ์ด์ ๋ ๋ฒ์งธ ํธ์ด์คํ ์ ๊ด๋ จ๋ ์ด์ผ๊ธฐ๋ฅผ ํด๋ณด์.
ํจ์ ํธ์ด์คํ
ํจ์ ํธ์ด์คํ ๋ ์์์ ๋ดค๋ ํธ์ด์คํ ๊ณผ ํฌ๊ฒ ๋ค๋ฅด์ง ์๋ค.
์ด๋ฒ ๋ฌผ์์ ํ ๋ฒ ๋ตํด๋ณด์.
- undefined bbb function b()
- function b() bbb bbb
EnvironmentRecord์ ์ํ Hoisting
๋ EnvironmentRecord๊ฐ ํ์ํ ์ ๋ณด๋ฅผ ๊ตฌ์ฑํ๋ ๊ณผ์ ์ ๋ณด์๋ฉด,
function hoisting() {
var b;
function b() {};
console.log(b);
b = 'bbb';
console.log(b);
console.lob(b);
}
์ฌ๊ธฐ์ ์ค์ํ ์ ์ ๋ณ์์ ์ ์ธ๋ถ๋ Hoisting๋นํ๊ณ ํ ๋น๋ถ๋ ์๋ ์๋ฆฌ์ ์์นํ๋ฉฐ ํจ์ ์ ์ธ์ ํจ์ ์ ์ฒด๋ฅผ ๋์ด์ฌ๋ฆฐ๋ค๋ ์ ์ด๋ค.
์ด์ ๊ฒฐ๊ณผ๋ฅผ ๋ด๋ณด์.
๊ฒฐ๊ณผ
์ฐ๋ฆฌ๊ฐ ์์ํ๋๋ก ๊ฒฐ๊ณผ๊ฐ ์ฑ๊ณต์ ์ผ๋ก ์ถ๋ ฅ๋์๋ค.
์ด๋ ๊ฒ ์คํ ๋ฌธ๋งฅ์ EnvironmentRecord๊ฐ ์ด๋ป๊ฒ ์คํํ๊ฒฝ์ ๊ตฌ์ฑํ๋์ง์ ๋ํด์ ์์๋ณด์๋ค.
์๋ฐ์คํฌ๋ฆฝํธ๋ก ํ๋ก๊ทธ๋๋ฐ์ ํ ๋ ๊ฐ๋, ์๋ ์ด๊ฒ ์ ์ด๋ ๊ฒ ์ถ๋ ฅ๋์ง? ํ๋ ์๋ฌธ์ด ๋ค์๋ ์ ์ด ์๋ ์ฌ๋์ด๋ผ๋ฉด ์ด๋ฒ ํฌ์คํ
์์ ๋ง์ ๊ฒ์ ์์๊ฐ์ผ๋ฉด ์ข๊ฒ ๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก ์์ ๊ธ์ ์ ์ฌ๋จ๋์ ์ฝ์ด ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ๋ณด๊ณ ํ์ตํ ๋ด์ฉ๊ณผ ์ฌ๋ฌ ๋ฌธ์์ ์๋ฃ๋ค์ ํฉ์ณ ์ข
ํฉ์ ์ผ๋ก ๋ถ์ํ ๊ธ์ด๋ค. ์์ธํ ์ ๋ณด๋ฅผ ์๊ณ ์ถ๋ค๋ฉด ์ฝ์ด ์๋ฐ์คํฌ๋ฆฝํธ์ ์ฑ
์ ์ฐธ๊ณ ํ๋ ๊ฒ๋ ์ถ์ฒํ๋ค.
๋๊ธ