Hoist
: ๋์ด์ฌ๋ฆฌ๋ค, ๋ค์ด์ฌ๋ฆฌ๋ค
์๋ฐ์คํฌ๋ฆฝํธ
: ์์์ ์๋๋ก ์์๋๋ก ์ฝ๋๊ฐ ์คํ๋๋ ์ธํฐํ๋ฆฌํฐ ์ธ์ด!
์๋ฐ์คํฌ๋ฆฝํธ์์ ์ ์ธ์ด ์๋จ์ผ๋ก ๋์ด์ฌ๋ ค์ง๋ ๊ฒ = ํธ์ด์คํ ์ด ๋๋ค!
ํธ์ด์คํ ์ด ๋๋ ๊ฒฝ์ฐ๋ค
1. ํจ์ ์ ์ธ๋ฌธ
hoistFunc();
function hoistFunc() {
console.log("hoist func");
}
ํจ์์ ์ธ์ด ํธ์ด์คํ ์ด ๋๊ธฐ ๋๋ฌธ์, ์คํ์ด ๋๋ค.
2. var ์ ์ด์ฉํ ๋ณ์์ ์ธ
์๋ฐ์คํฌ๋ฆฝํธ์ ๋ณ์ ์ ์ธ var, let, const !
์ธ๊ฐ์ง ๋ชจ๋ ํธ์ด์คํ ๋์ง๋ง, var์ ์ ์ธํ ๋๋จธ์ง๋ ํธ์ด์คํ ํน์ง์ ์ํฅ์ ๋ฐ์ง ์๋๋ค!
๋ณ์ ์ ์ธ๊ณผ์ ์ ์ดํด๋ณด๋ฉด
1. ์ ์ธ ๋จ๊ณ (Declaration) : ๋ณ์ ๊ฐ์ฒด์ ๋ณ์ ๋ฑ๋ก
2. ์ด๊ธฐํ ๋จ๊ณ (Initialization) : ๋ฑ๋ก๋ ๋ณ์๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ํ ๋น. (๋ณ์๋ undefined๋ก ์ด๊ธฐํ)
3. ํ ๋น ๋จ๊ณ(Assignment) : ํ ๋น๋ ๊ฐ์ undefined์ ํ ๋น
- var
im_var; // undefined
var im_var = 1;
- let
im_let; // Uncaught ReferenceError: im_let is not defined
let im_let = 1;
- const
im_const; // Uncaught ReferenceError: Cannot access 'im_const' before initialization
const im_const = 1;
var๋ง ์ ์ผํ๊ฒ ์ ์ธ๊ณผ ๋์์ ์ด๊ธฐํ๊ฐ ์ด๋ฃจ์ด์ ธ, ์ ์ธ๋ณด๋ค ๋จผ์ ๋ณ์๋ฅผ ์ฌ์ฉํ๋ฉด ์๋ฌ๊ฐ ๋์ง ์๊ณ undefined๋ก ์ด๊ธฐํ๊ฐ ๋๋ค!
const์ let๋ ํธ์ด์คํ ์ ํ๋ค๋ฉด์! ์๋ฌ๋ ์ ๋ฐ์?
โจ let๊ณผ const๋ TDZ(Temporal Death Zon)์ ์ํฅ์ ๋ฐ๋๋ค!
TDZ๋ ์ ์ฌ์ ์ธ ๋ฒ๊ทธ๋ฅผ ์ค์ธ๋ค. ๊ฐ์ ํ ๋นํ๊ธฐ ์ ์๋ ์ฌ์ฉํ ์ ์๋ ์ฃฝ์ ๊ณต๊ฐ์ผ๋ก ๋ง๋ ๋ค.
Uncaught ReferenceError: Cannot access 'im_const' before initialization
: 'im_const'๋ผ๋ ๋ณ์๊ฐ ํธ์ด์คํ ์ผ๋ก ๋ฉ๋ชจ๋ฆฌํ ๋น์ ๋์์ง๋ง, ๊ฐ์ด ์ด๊ธฐํ ๋๊ธฐ์ ์๋ ์ ๊ทผ์ด ๋ถ๊ฐ๋ฅํ๋ค๋ ์ค๋ฅ!
= ์ผ์์ ์ผ๋ก ์ฃฝ์ zon์ด๋ผ๊ณ ๋งํด์ค
์๋! ์คํ๋ ค ํธ์ด์คํ ์ข์๊ฑฐ์๋๊ฐ? ๋ผ๊ณ ์๊ฐ์ด ๋ค์์ง๋ง,
ํธ์ด์คํ ์ ์น๋ช ์ ๋จ์ !
ํธ์ด์คํ ์ ๊ฒฐ๊ณผ์ ์์ธก์ ํ๋ค๊ฒ ํ๋ค!
var n = 4;
function funcHoisting() {
console.log(n); // undefined
var n = 6;
console.log(n); //6
}
funcHoisting();
ํธ์ด์คํ ์ ํจ์๊ฐ ์์ ๊ฒฝ์ฐ, ํด๋น ํจ์์ ์ต์๋จ์ผ๋ก ๋์ด์ฌ๋ ค์ ธ, ์ ์ญ๋ณ์์ธ n = 4 ๊ฐ ์คํ๋๊ธฐ ์ ์, ์ฒซ ๋ก๊ทธ ์ถ๋ ฅ์์๋ ํ ๋น์ด ๋์ง ์์๋ค๋ undefined๊ฐ ๋ค์ด๊ฐ๊ฒ ๋๋ค.
์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด let๊ณผ const๊ฐ ๋์๋ค๊ณ ํ๋ค!
๊ฒฐ๋ก
var๋ ๋ณ์ ํธ์ด์คํ ๋ฌธ์ ์ ํจ์ Scope๋ฅผ ๊ณ ๋ คํ๋ฉด์ ์์ฑํด์ผํ๊ธฐ ๋๋ฌธ์, ์ค๋ฅ๋ฅผ ๋ฐ์์ํฌ ๊ฐ๋ฅ์ฑ์ด ๋ํํฉ๋๋ค.
var๋ฅผ ์ง์ํฉ์๋ค!~!
'Server๐งค > Node.JS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Node.js/Error] Cannot find module '~.json' (0) | 2022.10.26 |
---|---|
[Node.js] ์ด๋ฒคํธ๊ธฐ๋ฐ (1) | 2022.10.03 |
[Node.js] NPM ๋ผ์ด๋ธ๋ฌ๋ฆฌ (0) | 2022.06.21 |
[Node.js] NPM ๋ชจ๋ (0) | 2022.06.12 |
[Node.JS] ํ์ผ ์ฝ๊ธฐ & ์ฐ๊ธฐ (0) | 2022.06.08 |