ํธ์ด์คํ ์ด๋
์ฝ๋ ์คํ ์ ์ ๋ณ์๋ ํจ์์ ์ ์ธ๋ฌธ์ด ํด๋น ์ค์ฝํ์ ๊ฐ์ฅ ์๋ก ๋์ด์ฌ๋ ค์ง๋ ๊ฒ์ ๋งํ๋ค. ๋ฐ๋ผ์ ๋ณ์๊ฐ ์ ์ธ๋๊ธฐ๋ ์ด์ ์ ๋ณ์๋ฅผ ์ฐธ์กฐํ์ฌ ์ฌ์ฉํ ์ ์๋ ์ผ์ด ๊ฐ๋ฅํ๊ฒ ๋์ง๋ง, ์ด๋ ์์์น ๋ชปํ ์๋ฌ๋ฅผ ๋ฐ์ํ ์ ์์ด ๊ถ์ฅ๋๋ ๋ฐฉ์์ด ์๋๋ค.
๋ณ์ ํธ์ด์คํ
์๋ฆฌ
๋จผ์ ๊ฐ๋จํ ์๋ฅผ ๋ณด๋ฉฐ ํธ์ด์คํ ์ด ๋๋ ๊ณผ์ ์ ์ดํดํด๋ณด์.
console.log(amIHoisted); // undefined
var amIHoisted = true;
console.log(amIHoisted); // true
๋
ผ๋ฆฌ์ ์ผ๋ก ์๊ฐํ์ ๋ ์ฒซ๋ฒ์งธ ์ค์์ ์๋ฌ๋ฅผ ๋ฟ์ด๋ด์ผํ ๊ฒ ๊ฐ์ง๋ง ๊ทธ๋ ์ง ์๋ค. ์๋ํ๋ฉด ๋๋ฒ์งธ ์ค์ amIHoisted
๋ณ์ ์ ์ธ๋ฌธ์ด ๊ฐ์ฅ ์๋ก ํธ์ด์คํ
๋๊ธฐ ๋๋ฌธ์ด๋ค. ๊ฒ๋ค๊ฐ var
ํค์๋๋ก ์ ์ธ๋ ๋ณ์๋ ํ ๋น๋ ์ด๊ธฐ๊ฐ์ด ์์ ์ ๊ธฐ๋ณธ๊ฐ undefined
๋ก ์ด๊ธฐํ๊ฐ ๋๊ธฐ ๋๋ฌธ์ ์๋ฌ๋ฅผ ๋ฐ์์ํค๊ธด ์ปค๋
undefined
๊ฐ์ ์ป๊ฒ ๋๋ ๊ฒ์ด๋ค.
์๋๋ ์์ ์ฝ๋๊ฐ ์คํ๋๊ธฐ ์ , ์ปดํ์ผ ํ์์ ํด์๋๋ ๊ณผ์ ์ด๋ค.
var amIHoisted; // ์ ์ธ + undefined๋ก ์ด๊ธฐํ
console.log(amIHoisted); // undefined
amIHoisted = true; // ์ค์ ๊ฐ ์ด๊ธฐํ
console.log(amIHoisted); // true
๋ฐ๋ฉด์ ์ ์ธ๋ฌธ์ด ์๋ค๋ฉด ๋ณ์๋ ํธ์ด์คํ ๋์ง ์๋๋ค.
console.log(amIHoisted); // Uncaught ReferenceError: amIHoisted is not defined
amIHoisted = false;
ํ์ง๋ง ์ด๊ธฐํ๋ ์๋์ ์ผ๋ก ์ ์ธ์ ๋ฐ์์ํค๊ธฐ ๋๋ฌธ์ ์๋์ ๊ฐ์ด ์ด๊ธฐํ๋ฌธ์ด ๋จผ์ ์จ๋ค๋ฉด, ์ ์์ ์ผ๋ก ๋ณ์๋ฅผ ์ฐธ์กฐํ์ฌ ์ํ๋ ๊ฐ์ ์ฌ์ฉํ ์ ์๊ฒ ๋๋ค.
amIHoisted = false;
console.log(amIHoisted); // false
let, const ์ ํธ์ด์คํ
let
, const
ํค์๋๋ก ์ ์ธํ ๋ณ์๋ ํธ์ด์คํ
์ด ๋ฐ์ํ๋ค. ํ์ง๋ง var
๋ก ์ ์ธ๋ ๋ณ์์๋ ๋ฌ๋ฆฌ undefined
๋ก ์ด๊ธฐํ๊ฐ ๋์ง ์๊ธฐ ๋๋ฌธ์ ReferenceErrorr๊ฐ ๋ฐ์ํ๋ค.
console.log(iAmHoisted); // Uncaught ReferenceError: Cannot access 'iAmHoisted' before initialization
const amIHoisted = true;
์์
ํธ์ด์คํ ์ ๋ฒ์๋ฅผ ์ ์ ์๋ ์์ ์ด๋ค. ํธ์ด์คํ ์ ๋ณ์์ ์ค์ฝํ์ ์ํฅ์ ๋ฐ๋๋ค. ๋ฐ๋ผ์ ๋ฌด์กฐ๊ฑด ์คํฌ๋ฆฝํธ์ ์ต์๋จ์ด ์๋๋ผ ๋ณ์๊ฐ ์์นํ ์ค์ฝํ ์์ ์ต์๋จ์ผ๋ก ๋์ด์ฌ๋ ค์ง๋ค.
var number = 1;
function hoistingTest() {
// var number; // ํจ์์ ์ง์ญ ๋ณ์ ํธ์ด์คํ
์ด ๋ฐ์ํ๋ค.
console.log(number);
var number = 2;
}
hoistingTest(); // undefined
ํจ์ ํธ์ด์คํ
์ ์ธ์์ผ๋ก ์์ฑ๋ ํจ์๋ ํธ์ด์คํ
๊ณผ ๋์์ ๊ฐ์ ์ด๊ธฐํ๊ฐ ๋ฐ์ํ๋ค. var
๋ณ์์ฒ๋ผ undefined
๋ก ์ด๊ธฐํ๊ฐ ๋๋ ๊ฒ ์๋๋ผ ์ค์ ํจ์ ๊ฐ์ฒด๊ฐ ํ ๋น์ด ๋๋ค. ๋ฐ๋ผ์ ํจ์ ์ ์ธ๋ฌธ ์ด์ ์๋ ํจ์๋ฅผ ํธ์ถํด์ ๋์์ํค๋ ๊ฒ์ด ๊ฐ๋ฅํด์ง๋ค.
hoistingTest(); // It Works!
function hoistingTest() {
console.log('It Works!');
}
์๋์ฒ๋ผ ํํ์์ผ๋ก ์์ฑ๋ ํจ์๋ ์ผ๋ฐ ๋ณ์์ ๊ฐ์ ๋ฐฉ์์ผ๋ก ํธ์ด์คํ ์ด ๋ฐ์ํ๋ค.
hoistingTest(); // Uncaught ReferenceError: hoistingTest is not defined
const hoistingTest = () => {
console.log('It Works!');
}
์ฐธ๊ณ
https://developer.mozilla.org/en-US/docs/Glossary/Hoisting
https://www.educative.io/courses/javascript-interview-handbook/YMBzwk2zxBA
'๐ป๐ > ๊ฐ๋ฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[react-youtube] videoId์ ๋ฐ๋ผ ์์์ด ๋ณ๊ฒฝ๋์ง ์์ ๋ (0) | 2022.09.02 |
---|---|
[JS] ํด๋ก์ (Closure) ํ์ฉํ๊ธฐ (0) | 2022.08.28 |
[ESLint] import/order ๊ท์น ์ค์ ํ๊ณ ๋ค์ฃฝ๋ฐ์ฃฝ import ์ฝ๋ ๊ฐ์ ํ๊ธฐ (3) | 2022.08.07 |
[JS] ์ด๋ฒคํธ์ target๊ณผ currentTarget ์ฐจ์ด (with ๋ฒ๋ธ๋ง) (0) | 2022.08.06 |
[JS] ๊ณ ์ฐจ ํจ์(Higher-Order Function) (0) | 2022.07.31 |