ํธ์ด์คํ (Hoisting)
์๋ฐ์คํฌ๋ฆฝํธ๋ ํจ์๊ฐ ์คํ๋๊ธฐ ์ ํจ์ ๋ด์ ํ์ํ ๋ณ์๊ฐ๋ค์ ๋ฏธ๋ฆฌ ๋ชจ์์ ์ ์ธํ๋๋ฐ, ์ด๊ฒ์ ํธ์ด์คํ (Hoisting) ์ด๋ผ๊ณ ํ๋ค.
๋ฏธ๋ฆฌ ์ ์ธ๋ ํจ์๋ฅผ ์ฌ์ฉ
// ํจ์ ์ ์ธ๋ฌธ
function fristFunc() {
innerFunction();
function innerFunction() {
console.log("firstFunc innerFuncion!");
}
}
// ํจ์ ํธ์ถ
fristFunc();
์์ ์๋ฐ์คํฌ๋ฆฝํธ ์์ค๋ฅผ ํ์ธํด๋ณด์.
ํจ์์ ์ ์ธ์ด ๋๋๊ณ , ๋ง์ง๋ง ์ค fristFunc();
๋ก ์ธํด firstFunc๋ฅผ ๋ถ๋ฌ์จ๋ค.
fristFunc()๊ฐ ์์ฐจ์ ์ผ๋ก ์คํํ๋ค๋ฉด, ํจ์๋ฅผ ๋ถ๋ฅด๋ innerFunction();
๊ฐ ๋จผ์ ๋์ค๊ธฐ ๋๋ฌธ์ ์ค๋ฅ๊ฐ ๋ ๊ฒ ๊ฐ์ง๋ง,
์คํ์์ผ๋ณด๋ฉด ์ฝ์์ฐฝ์ firstFunc innerFuncion!
๊ฐ ์ ๋์ด์ ์ ์ ์๋ค.
ํจ์๋ฅผ ์คํ ์ , ํจ์์ ๋ํ ๋ด์ฉ์ ํ๋ก๊ทธ๋จ์ด ํ์ธํ๊ณ innerFunction์ ๋ฏธ๋ฆฌ ์ ์ธํด์ฃผ์๊ธฐ ๋๋ฌธ์ ๊ฐ๋ฅํ๋ค.
ํจ์ ํํ์๊ณผ ํธ์ด์คํ
// ํจ์ ์ ์ธ๋ฌธ
function innerFunction() {
console.log("firstFunc innerFuncion!");
}
์์ ์์ค์ฒ๋ผ ์ด๋ ๊ฒ ํจ์๋ฅผ ๋ํ๋ด๋ฉด ํจ์ ์ ์ธ๋ฌธ์ด์ง๋ง,
// ํจ์ ํํ์
const innerValue = function innerFunction() {
console.log("firstFunc innerFuncion!");
};
์ด๋ฐ ๋ฐฉ์์ ํจ์ ํํ์์ด๋ผ๊ณ ํ๋๋ฐ, ํธ์ด์คํ
์ ์๊ฐํ ๋, ํจ์ ํํ์์์ ์ฃผ์๋ฅผ ํด์ผํ๋ค.
// ํจ์ ์ ์ธ์
function secondFunc() {
innerValue();
// ํจ์ ํํ์
const innerValue = function innerFunction() {
console.log("firstFunc innerFuncion!");
};
}
// ํจ์ ํธ์ถ
secondFunc();
์์ ์์ค๋ฅผ ์คํํ๋ฉด Cannot access 'innerValue' before initialization
๋ผ๋ ๋ฉ์ธ์ง๊ฐ ๋จ๊ณ ์คํ์ด ์๋๋ค.
๋ง์ด ํ๊น๋ฆด ์๋ ์๋ ๋ถ๋ถ์ธ๋ฐ, ํจ์ ํํ์์ ์ฌ์ฉํ๋ค๋ฉด,
ํธ์ด์คํ
๊ณผ์ ์์๋ ํจ์ function innerFunction() ๊ฐ ์๋, ๋ณ์ const innerValue๋ง ๋ฏธ๋ฆฌ ์ ์ธํด๋๊ธฐ ๋๋ฌธ์ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค.
์ฃผ์๋ฅผ ํด์ ์ฌ์ฉํด์ผํ๋ค.
'JavaScript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
var, let, const (0) | 2022.03.12 |
---|---|
ES6 ํจ์ ๊ธฐ๋ฅ (0) | 2022.03.11 |
ajax๋ก Post ์์ฒญํ๊ธฐ (0) | 2022.03.10 |
์๋ฐ์คํฌ๋ฆฝํธ ์๋ฃ๊ตฌ์กฐ (0) | 2022.03.08 |
SetTimeout๊ณผ ๋น๋๊ธฐ (0) | 2022.03.07 |