[JavaScript] ํธ์ด์คํ (Hoisting)
ํธ์ด์คํ (Hoisting)์ด๋?
์๋ฐ์คํฌ๋ฆฝํธ ์์ง(Interpreter)์ด ์ฝ๋๋ฅผ ์คํํ๊ธฐ ์ ,
๋ณ์, ํจ์, ํด๋์ค์ ์ ์ธ๋ฌธ์ ์๋ก ๋์ด ์ฌ๋ฆฌ๋ ๊ฒ์ ๋งํ๋ค.
๋ณ์์ ์ ์ธ๊ณผ ์ด๊ธฐํ๋ฅผ ๋ถ๋ฆฌํ ํ, ์ ์ธ๋ง ์ฝ๋์ ์ต์๋จ์ผ๋ก ์ฎ๊ธด๋ค.
ํจ์ ํธ์ด์คํ
๋ฐ๋ผ์ ํจ์์ ์ ์ธ๋ฌธ์ ์ ์ธ ์ด์ ์๋ ํธ์ถ์ด ๊ฐ๋ฅํ๋ค.
print();
function print() {
console.log('Good Morning๐ค๏ธ');
}
๋ณ์์ ํด๋์ค ํธ์ด์คํ
๋ณ์(let, const)์ ํด๋์ค๋ ์ ์ธ๋ง ํธ์ด์คํ ์ด ๋๊ณ , ์ด๊ธฐํ๋ ํธ์ด์คํ ์ด ๋์ง ์๋๋ค.
๋ฐ๋ผ์ ์๋์ ๊ฐ์ด ์ด๊ธฐํ ์ ์ ๋ณ์์ ์ ๊ทผํ๋ฉด ์ปดํ์ผ(๋น๋) ์๋ฌ๊ฐ ๋ฐ์ํ๋ค.
error "Cannot access (๋ณ์๋ช ๋๋ ํด๋์ค๋ช ) before initialization" = '์์ง ๋ณ์(๋๋ ํด๋์ค)๊ฐ ์ด๊ธฐํ๊ฐ ๋์ง ์์์ด'
console.log(hi); // ์๋ฌ ๋ฐ์
let hi = 'hi';
const car = new Car(); // ์๋ฌ ๋ฐ์
class Car {}
์๋ ์ฝ๋๋ ์ญ์ ์๋ฌ๊ฐ ๋ฐ์ํ๋ค.
๋ธ๋ก ์์์ x๊ฐ ํธ์ด์คํ ๋์ด ์กด์ฌํ๊ธด ํ์ง๋ง,
๋ธ๋ก ์์ ์๋ ๊ทธ x๊ฐ ์ด๊ธฐํ๊ฐ ๋์ง ์์์ผ๋ฏ๋ก 'Cannot access 'x' before initializion' ์๋ฌํ๋ค.
let x = 1;
{
console.log(x); // ์๋ฌ ๋ฐ์
let x = 2;
}