Server๐Ÿงค/Node.JS

ํ˜ธ์ด์ŠคํŒ…์ด๋ž€? / var๋ฅผ ์ง€์–‘ํ•˜๊ณ  const, let ์‚ฌ์šฉํ•˜๋ผ๋Š” ์ด์œ 

yujindonut 2022. 10. 3. 22:29
728x90

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๋ฅผ ์ง€์–‘ํ•ฉ์‹œ๋‹ค!~!

 

 

728x90