์ƒˆ์†Œ์‹

FrontEnd/JavaScript

[JavaScript] ํ•จ์ˆ˜ ์„ ์–ธ๋ฌธ๊ณผ ํ•จ์ˆ˜ ํ‘œํ˜„์‹, ํ™”์‚ดํ‘œ ํ•จ์ˆ˜ ๊ทธ๋ฆฌ๊ณ  ํ˜ธ์ด์ŠคํŒ…

  • -

๐Ÿฃ ํ•จ์ˆ˜์„ ์–ธ, ํ•จ์ˆ˜ํ‘œํ˜„์‹, ํ™”์‚ดํ‘œํ•จ์ˆ˜!


์ตœ๊ทผ ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ๋Œ€ํ•ด์„œ๋งŒ ์ •๋ฆฌ๋ฅผ ํ–ˆ์—ˆ๋Š”๋ฐ, ์ฃผ์ œ์˜ ๋‹ค์–‘์„ฑ์„ ์œ„ํ•ด ๋‹ค์‹œ JavaScript ๊ฐœ๋…์„ ์ •๋ฆฌํ•˜์—ฌ ๋‹ค๋ค„๋ณผ๊นŒํ•œ๋‹ค. ์˜ค๋Š˜์˜ ์ฃผ์ œ๋Š” ํ•จ์ˆ˜์„ ์–ธ๋ฌธ, ํ•จ์ˆ˜ํ‘œํ˜„์‹ ๊ทธ๋ฆฌ๊ณ  ํ™”์‚ดํ‘œํ•จ์ˆ˜์ด๋‹ค!_! ๊ทธ๋ฆฌ๊ณ  ํ˜ธ์ด์ŠคํŒ…๊ณผ TDZ ๊นŒ์ง€ ์‚ดํŽด๋ณผ๊ฑด๋ฐ, ์‰ฝ๊ฒŒ ์‰ฝ๊ฒŒ ์ •๋ฆฌ๋ฅผ ํ• ํ…Œ๋‹ˆ~ ์˜ค๋Š˜๋„ ์Šค๋”ฐ๋œจ!!

 

๋‘˜๋ฆฌ ํ˜ธ์ด ์งค

 

 

๐Ÿฃ ํ•จ์ˆ˜ ์„ ์–ธํ˜•


1. ๊ฐœ๋… ๋ฐ ํŠน์ง• 

ํ•จ์ˆ˜ ์„ ์–ธ๋ฌธ์€ ํ•จ์ˆ˜ ์ด๋ฆ„๊ณผ ํ•จ๊ป˜ "function" ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•˜๋Š” ๋ฐฉ์‹. ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ด์ŠคํŒ…๋˜๊ธฐ ๋•Œ๋ฌธ์— ํ•จ์ˆ˜ ์ •์˜ ์ด์ „์— ํ˜ธ์ถœํ•ด๋„ ๋™์ž‘

 

  • ํ•จ์ˆ˜ ์„ ์–ธํ˜•์€ function ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ•จ์ˆ˜๋ฅผ ์„ ์–ธ
  • ์Šคํฌ๋ฆฝํŠธ๋‚˜ ํ•จ์ˆ˜ ๋‚ด์—์„œ ์–ด๋””์„œ๋“  ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ์Œ
  • ํ•จ์ˆ˜ ์„ ์–ธํ˜•์€ ํ˜ธ์ด์ŠคํŒ…์œผ๋กœ ์ธํ•ด ์„ ์–ธ๋ถ€๊ฐ€ ์ฝ”๋“œ ์ƒ๋‹จ์œผ๋กœ ๋Œ์–ด์˜ฌ๋ ค์ง

 

2. ์ฝ”๋“œ๋กœ ์‚ดํŽด๋ณด๊ธฐ

function add(a, b) {
  return a + b;
}
console.log(add(2, 3)); // Output: 5

function add(a, b) {
  return a + b;
}

console.log(add(5, 7)); // Output: 12

 

  • ์ด ์˜ˆ์—์„œ๋Š” 'add' ํ•จ์ˆ˜๊ฐ€ ํ•จ์ˆ˜ ์„ ์–ธ์„ ์‚ฌ์šฉํ•˜์—ฌ ์„ ์–ธ
  • ํ•จ์ˆ˜ ์„ ์–ธ์€ ์™„์ „ํžˆ ํ˜ธ์ด์ŠคํŒ…
  • ์ฆ‰, ํ•จ์ˆ˜ ์ด๋ฆ„๊ณผ ํ•จ์ˆ˜ ๋ณธ๋ฌธ์ด ๋ชจ๋‘ ํ•ด๋‹น ๋ฒ”์œ„์˜ ๋งจ ์œ„๋กœ ํ˜ธ์ด์ŠคํŒ…
  • ๊ฒฐ๊ณผ์ ์œผ๋กœ ์ฝ”๋“œ์—์„œ ์„ ์–ธํ•˜๊ธฐ ์ „์— add ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœ ๊ฐ€๋Šฅ
ํ•จ์ˆ˜ ์„ ์–ธ: ์ „์ฒด ํ•จ์ˆ˜(์ด๋ฆ„๊ณผ ๋ณธ๋ฌธ ๋ชจ๋‘)๊ฐ€ ํ˜ธ์ด์ŠคํŒ…. ํ•จ์ˆ˜๋ฅผ ์„ ์–ธํ•˜๊ธฐ ์ „์— ํ˜ธ์ถœ ๊ฐ€๋Šฅ

 

๐Ÿฃ ํ•จ์ˆ˜ ํ‘œํ˜„์‹


1. ๊ฐœ๋… ๋ฐ ํŠน์ง• 

ํ•จ์ˆ˜ ํ‘œํ˜„์‹์€ ํ•จ์ˆ˜๋ฅผ ๋ณ€์ˆ˜์— ํ• ๋‹นํ•˜์—ฌ ์ •์˜ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ, ํ•จ์ˆ˜๊ฐ€ ๋ณ€์ˆ˜์— ์ €์žฅ๋˜์–ด์•ผ ํ˜ธ์ถœ ๊ฐ€๋Šฅ. ํ•จ์ˆ˜ ํ‘œํ˜„์‹์€ ๋ณ€์ˆ˜์— ํ• ๋‹น๋œ ์ดํ›„์—๋งŒ ์‚ฌ์šฉ

 

  • ํ•จ์ˆ˜ ํ‘œํ˜„์‹์€ ๋ณ€์ˆ˜์— ํ•จ์ˆ˜๋ฅผ ํ• ๋‹นํ•˜์—ฌ ์„ ์–ธํ•˜๋ฉฐ
  • ์„ ์–ธ ์ด์ „์— ํ˜ธ์ถœํ•˜๋ฉด ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒ
  • ํ•จ์ˆ˜ ํ‘œํ˜„์‹์€ ๋ณ€์ˆ˜์˜ ์Šค์ฝ”ํ”„์— ๋”ฐ๋ผ ๋™์ž‘
  • ์‚ฌ์‹ค ํ•จ์ˆ˜ ํ‘œํ˜„์‹๋„ ํ˜ธ์ด์ŠคํŒ…์ด ๋˜๊ธฐ๋Š” ํ•˜์ง€๋งŒ ๋ณ€์ˆ˜๊ฐ€ ํ˜ธ์ด์ŠคํŒ… ๋˜๋Š” ๊ฒƒ
ํ•จ์ˆ˜ํ‘œํ˜„์‹๋„ ๋ณ€์ˆ˜ ์ž์ฒด๊ฐ€ ํ˜ธ์ด์ŠคํŒ…๋˜์ง€๋งŒ ํ•จ์ˆ˜์— ๋Œ€ํ•œ ํ• ๋‹น์€ ๋Ÿฐํƒ€์ž„์— ๋ฐœ์ƒํ•จ

 

  • ํ•จ์ˆ˜ ํ‘œํ˜„์‹์—์„œ๋Š” ํ•จ์ˆ˜ ์ •์˜๊ฐ€ ์•„๋‹Œ ๋ณ€์ˆ˜ ์„ ์–ธ๋งŒ ๋Œ์–ด์˜ฌ๋ ค์ง
  • ๋ณ€์ˆ˜๋Š” ํ•ด๋‹น ๋ฒ”์œ„์˜ ๋งจ ์œ„๋กœ ๋Œ์–ด์˜ฌ๋ ค์ง€๊ณ  '์ •์˜๋˜์ง€ ์•Š์Œ undefined'์œผ๋กœ ์ดˆ๊ธฐํ™”
  • ์‹ค์ œ ํ•จ์ˆ˜ ํ• ๋‹น์€ ํ• ๋‹น ๋ฌธ์ด ์‹คํ–‰๋˜๋Š” ์ง€์ ์ธ ๋Ÿฐํƒ€์ž„์— ๋ฐœ์ƒ

 

2. ์ฝ”๋“œ๋กœ ์‚ดํŽด๋ณด๊ธฐ

const add = function(a, b) {
  return a + b;
};
console.log(add); // Output: ReferenceError: Cannot access 'add' before initialization

const add = function(a, b) {
  return a + b;
};

console.log(add(5, 3)); // Output: 8

 

  • ์ด ์˜ˆ์—์„œ๋Š” add ๋ณ€์ˆ˜๊ฐ€ const๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„ ์–ธ๋˜๊ณ  ํ•จ์ˆ˜ ํ‘œํ˜„์‹์ด ํ• ๋‹น
  • var์™€ ๋‹ฌ๋ฆฌ const(๋ฐ let)๋กœ ์„ ์–ธ๋œ ๋ณ€์ˆ˜๋Š” undefine์œผ๋กœ ์ดˆ๊ธฐํ™”๋˜์ง€ ์•Š์œผ๋ฉฐ
  • ๋ธ”๋ก ์‹œ์ž‘๋ถ€ํ„ฐ ์„ ์–ธ์ด ๋‚˜ํƒ€๋‚  ๋•Œ๊นŒ์ง€ "์ผ์‹œ์  ๋ฐ๋“œ์กด"
  • ์ด๋Š” ์„ ์–ธ ์ „์— add์— ์•ก์„ธ์Šคํ•˜๋ ค๊ณ  ํ•˜๋ฉด ReferenceError๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธ
๋ณ€์ˆ˜ ์„ ์–ธ(const ์‚ฌ์šฉ): ์„ ์–ธ์€ ํ•ด๋‹น ๋ฒ”์œ„์˜ ๋งจ ์œ„๋กœ ๋Œ์–ด์˜ฌ๋ ค์ง€์ง€๋งŒ ์ดˆ๊ธฐํ™”๋˜์ง€๋Š” ์•Š์Œ. ๋ณ€์ˆ˜๋Š” ํ• ๋‹น์ด ๋ฐœ์ƒํ•  ๋•Œ๊นŒ์ง€ "์ผ์‹œ์  ๋ฐ๋“œ์กด"์— ์žˆ์Œ.
๊ธฐ๋Šฅ ํ• ๋‹น: ํ• ๋‹น์€ ๋Ÿฐํƒ€์ž„์— ๋ฐœ์ƒ. ํ• ๋‹น ์ „์— ๋ณ€์ˆ˜์— ์•ก์„ธ์Šคํ•˜๋ ค๊ณ  ํ•˜๋ฉด ReferenceError๊ฐ€ ๋ฐœ์ƒ

 

๐Ÿฃ ํ™”์‚ดํ‘œ ํ•จ์ˆ˜


1. ๊ฐœ๋… ๋ฐ ํŠน์ง• 

  • ํ™”์‚ดํ‘œ ํ•จ์ˆ˜๋Š” ์ž์ฒด this, arguments, super ๋˜๋Š” new.target์„ ๋ฐ”์ธ๋”ฉํ•˜์ง€ ์•Š๋Š” ํ•จ์ˆ˜ ํ‘œํ˜„์‹์„ ์ž‘์„ฑํ•˜๊ธฐ ์œ„ํ•œ ๊ฐ„๊ฒฐํ•œ ๊ตฌ๋ฌธ
  • ํ™”์‚ดํ‘œ ํ•จ์ˆ˜ ํ‘œํ˜„์‹(ํ™”์‚ดํ‘œ ํ•จ์ˆ˜ expression)์€ ํ•จ์ˆ˜ ํ‘œํ˜„์‹์— ๋Œ€ํ•œ ๊ฐ„๊ฒฐํ•œ ๋Œ€์•ˆ์œผ๋กœ, ์•ฝ๊ฐ„์˜ ์˜๋ฏธ์  ์ฐจ์ด์™€ ์˜๋„์ ์ธ ์‚ฌ์šฉ์ƒ์˜ ์ œํ•œ์„ ๊ฐ€์ง€๊ณ  ์žˆ์Œ

 

2. ์ฝ”๋“œ๋กœ ์‚ดํŽด๋ณด๊ธฐ

const add = (a, b) => a + b;

 

console.log(myArrowFunction); // Output: undefined

var myArrowFunction = () => {
  console.log("Hello, world!");
};

myArrowFunction(); // Output: Hello, world!

 

  • ์ด ์˜ˆ์—์„œ๋Š” myArrowFunction ๋ณ€์ˆ˜๊ฐ€ ํ˜ธ์ด์ŠคํŒ…๋˜๊ณ  undefine์œผ๋กœ ์ดˆ๊ธฐํ™”
  • ํ™”์‚ดํ‘œ ํ•จ์ˆ˜ ์ž์ฒด๋Š” ํ˜ธ์ด์ŠคํŒ…๋˜์ง€ ์•Š์œผ๋ฉฐ ํ• ๋‹น์€ ๋Ÿฐํƒ€์ž„์— ๋ฐœ์ƒ
  • ๋”ฐ๋ผ์„œ ํ• ๋‹น ์ „์— 'myArrowFunction'์„ ํ˜ธ์ถœํ•˜๋ฉด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜์ง€๋งŒ ํ• ๋‹น ์ „์— ๋ณ€์ˆ˜๋ฅผ ๊ธฐ๋กํ•˜๋ฉด '์ •์˜๋˜์ง€ ์•Š์Œ'์ด ํ‘œ์‹œ
ํ™”์‚ดํ‘œ ํ•จ์ˆ˜์— ๋Œ€ํ•œ ๋ณ€์ˆ˜ ์„ ์–ธ์ด ํ˜ธ์ด์ŠคํŒ…,
ํ™”์‚ดํ‘œ ๊ธฐ๋Šฅ ํ• ๋‹น์€ ํ˜ธ์ด์ŠคํŒ… ๋‹จ๊ณ„๊ฐ€ ์•„๋‹Œ ๋Ÿฐํƒ€์ž„์— ๋ฐœ์ƒ

 

๐Ÿฃ ํ•จ์ˆ˜ ์„ ์–ธํ˜• vs ํ•จ์ˆ˜ ํ‘œํ˜„์‹


1. ํ˜ธ์ด์ŠคํŒ…

  • ํ•จ์ˆ˜ ์„ ์–ธ๋ฌธ์€ ํ˜ธ์ด์ŠคํŒ…์— ์˜ํ•ด ์ฝ”๋“œ์˜ ์ƒ๋‹จ์œผ๋กœ ๋Œ์–ด์˜ฌ๋ ค์ง€๋ฏ€๋กœ ์ •์˜ ์ด์ „์—๋„ ํ˜ธ์ถœ ๊ฐ€๋Šฅ
  • ๋ฐ˜๋ฉด, ํ•จ์ˆ˜ ํ‘œํ˜„์‹์€ ๋ณ€์ˆ˜ ํ• ๋‹น์ด ์ด๋ฃจ์–ด์ง„ ์ดํ›„๋ถ€ํ„ฐ ํ˜ธ์ถœ

 

2. ์ต๋ช… ํ•จ์ˆ˜

  • ํ•จ์ˆ˜ ์„ ์–ธ๋ฌธ์€ ํ•จ์ˆ˜ ์ด๋ฆ„์ด ํ•„์ˆ˜์ ์ด์ง€๋งŒ, ํ•จ์ˆ˜ ํ‘œํ˜„์‹์€ ์ต๋ช… ํ•จ์ˆ˜๋กœ ์ •์˜ํ•  ์ˆ˜ ์žˆ์Œ

 

3. ํ‘œํ˜„์‹์œผ๋กœ ํ™œ์šฉ

  • ํ•จ์ˆ˜ ํ‘œํ˜„์‹์€ ๋ณ€์ˆ˜์— ํ• ๋‹น๋˜๋ฏ€๋กœ, ๋‹ค๋ฅธ ํ•จ์ˆ˜์˜ ์ธ์ž๋กœ ์ „๋‹ฌํ•˜๊ฑฐ๋‚˜ ๋ฐ˜ํ™˜ ๊ฐ’์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๋“ฑ ๋‹ค์–‘ํ•œ ์ƒํ™ฉ์—์„œ ํ™œ์šฉ ๊ฐ€๋Šฅ

 

 

๐Ÿฃ ํ˜ธ์ด์ŠคํŒ…


1. ๊ฐœ๋… ๋ฐ ํŠน์ง• 

ํ˜ธ์ด์ŠคํŒ…์€ ์ปดํŒŒ์ผ ๋‹จ๊ณ„ ์ค‘์— ๋ณ€์ˆ˜ ๋ฐ ํ•จ์ˆ˜ ์„ ์–ธ์ด ํฌํ•จ ๋ฒ”์œ„์˜ ๋งจ ์œ„๋กœ ์ด๋™๋˜๋Š” ๋™์ž‘

 

  • JavaScript์—์„œ ํ˜ธ์ด์ŠคํŒ…์€ ์ปดํŒŒ์ผ ๋‹จ๊ณ„ ์ค‘์— ๋ณ€์ˆ˜ ๋ฐ ํ•จ์ˆ˜ ์„ ์–ธ์ด ํฌํ•จ ๋ฒ”์œ„์˜ ๋งจ ์œ„๋กœ ์ด๋™๋˜๋Š” ๋™์ž‘
  • ์ฆ‰, var๋กœ ์„ ์–ธ๋œ ๋ณ€์ˆ˜๋Š” ์ •์˜๋˜์ง€ ์•Š์Œ์œผ๋กœ ์ดˆ๊ธฐํ™”๋˜๋Š” ๋ฐ˜๋ฉด, ํ•จ์ˆ˜ ์„ ์–ธ์€ ์ฝ”๋“œ์— ์ •์˜๋˜๊ธฐ ์ „์— ํ˜ธ์ถœ ๊ฐ€๋Šฅ
  • ๊ทธ๋Ÿฌ๋‚˜ 'let' ๋ฐ 'const' ์„ ์–ธ์€ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ๋Œ์–ด์˜ฌ๋ ค์ง€์ง€ ์•Š์œผ๋ฉฐ ํ•ด๋‹น ์ •์˜๋ฅผ ๋งŒ๋‚  ๋•Œ๊นŒ์ง€ ์‹œ๊ฐ„์  ๋ฐ๋“œ์กด์— ๋‚จ์Œ.

 

2. ์ฃผ์˜ํ•  ์ ?

ํ˜ธ์ด์ŠคํŒ…์€ ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ๊ณผ ์˜ˆ์ธก ๊ฐ€๋Šฅ์„ฑ์„ ๋‚ฎ์ถœ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, ๋ณ€์ˆ˜ ๋ฐ ํ•จ์ˆ˜๋ฅผ ๊ฐ€๋Šฅํ•œํ•œ ์„ ์–ธํ•œ ์œ„์น˜์— ๊ฐ€๊นŒ์ด ํ•˜๊ณ , ๋ฏธ๋ฆฌ ์ดˆ๊ธฐํ™”ํ•˜์—ฌ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๊ถŒ์žฅ

 

3. ์žฅ๋‹จ์ ?

์žฅ์ 

  • ์œ ์—ฐ์„ฑ: ํ•จ์ˆ˜์™€ ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•˜๊ธฐ ์ „์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๋•Œ๋กœ๋Š” ๋” ๊น”๋”ํ•˜๊ณ  ์ฝ๊ธฐ ์‰ฌ์šด ์ฝ”๋“œ๊ฐ€ ์ƒ์„ฑ๋  ์ˆ˜ ์žˆ์Œ.
  • ํ•จ์ˆ˜ ๋ฒ”์œ„ ๋ช…ํ™•์„ฑ: ํ•จ์ˆ˜ ์„ ์–ธ์˜ ๊ฒฝ์šฐ ํ•จ์ˆ˜ ๋ฒ”์œ„๊ฐ€ ๋ธ”๋ก ๋ฒ”์œ„๊ฐ€ ์•„๋‹Œ ํฌํ•จ ํ•จ์ˆ˜๋กœ ์ง€์ •๋œ๋‹ค๋Š” ์ ์„ ๋ช…ํ™•ํžˆ ํ•˜๋Š”๋ฐ, JavaScript์˜ ํ•จ์ˆ˜ ๋ฒ”์œ„ ๊ทœ์น™์— ๋”ฐ๋ฆ„

 

๋‹จ์ 

  • ์ž ์žฌ์ ์ธ ๋ฒ„๊ทธ: var๋กœ ์„ ์–ธ๋œ ๋ณ€์ˆ˜๋Š” undefined์œผ๋กœ ๋Œ์–ด์˜ฌ๋ ค์ง€๊ณ  ์ดˆ๊ธฐํ™”. ์ด๋Š” ๊ฐ’์ด ํ• ๋‹น๋˜๊ธฐ ์ „์— ์•ก์„ธ์Šคํ•˜๋ฉด ๋ฒ„๊ทธ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Œ.
  • ๊ฐ€๋…์„ฑ ๋ฌธ์ œ: ํ˜ธ์ด์ŠคํŒ…์€ ์ฝ”๋“œ์˜ ์‹ค์ œ ์‹คํ–‰ ์ˆœ์„œ๋ฅผ ๋ชจํ˜ธํ•˜๊ฒŒ ๋งŒ๋“ค์–ด ํ˜ธ์ด์ŠคํŒ… ๊ทœ์น™์— ์ต์ˆ™ํ•˜์ง€ ์•Š์€ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ดํ•ดํ•˜๊ธฐ ์–ด๋ ต๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Œ.
  • ์—„๊ฒฉ ๋ชจ๋“œ ์ฐจ์ด์ : ์—„๊ฒฉ ๋ชจ๋“œ(``use strict';`)์—์„œ๋Š” 'var'์„ ์‚ฌ์šฉํ•˜์—ฌ ์šฐ๋ฐœ์ ์ธ ์ „์—ญ ๋ณ€์ˆ˜๊ฐ€ ์ƒ์„ฑ๋˜์ง€ ์•Š์Œ. ์ด๋Š” ํ˜ธ์ด์ŠคํŒ… ๋™์ž‘์„ ๋ณ€๊ฒฝํ•˜๊ณ  ์ฝ”๋“œ๊ฐ€ ์ œ๋Œ€๋กœ ๊ตฌ์กฐํ™”๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ๊ฒฐ๊ณผ๋ฅผ ์ดˆ๋ž˜ํ•  ์ˆ˜ ์žˆ์Œ.

 

์š”์•ฝํ•˜๋ฉด ํ˜ธ์ด์ŠคํŒ…์€ ์œ ์—ฐ์„ฑ์„ ์ œ๊ณตํ•˜๊ณ  JavaScript์˜ ๋ฒ”์œ„ ์ง€์ • ๊ทœ์น™์— ๋ถ€ํ•ฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๋ณ€์ˆ˜ ์ดˆ๊ธฐํ™” ๋ฐ ์ฝ”๋“œ ๋ช…ํ™•์„ฑ๊ณผ ๊ด€๋ จ๋œ ์ž ์žฌ์ ์ธ ํ•จ์ •๋„ ๋ฐœ์ƒ. ๋ณ€์ˆ˜ ์„ ์–ธ์— 'let' ๋ฐ 'const'๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ๋ช…ํ™•ํ•œ ์ฝ”๋“œ ๊ตฌ์„ฑ์„ ๋ณด์žฅํ•˜๋Š” ๋“ฑ์˜ ์ตœ์‹  JavaScript ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๋ฉด ์ด๋Ÿฌํ•œ ๋ฌธ์ œ ์ค‘ ์ผ๋ถ€๋ฅผ ์™„ํ™” ๊ฐ€๋Šฅ.

 

 

๐Ÿฃ TDZ (Temporal Dead Zone)


1. ๊ฐœ๋…

  • TDZ(Temporal Dead Zone)๋Š” ๋ณ€์ˆ˜๊ฐ€ ์„ ์–ธ๋œ ์œ„์น˜๋ถ€ํ„ฐ ์ดˆ๊ธฐํ™”๋  ๋•Œ๊นŒ์ง€์˜ ์˜์—ญ
  • let๊ณผ const ๋ณ€์ˆ˜๋Š” ์„ ์–ธ๋˜์—ˆ์ง€๋งŒ ์•„์ง ์ดˆ๊ธฐํ™”๋˜์ง€ ์•Š์€ ์ƒํƒœ์—์„œ ์ ‘๊ทผํ•˜๋ ค๊ณ  ํ•˜๋ฉด TDZ์— ํ•ด๋‹นํ•˜๋ฉฐ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒ
  • ์ดํ›„ ๋ณ€์ˆ˜๊ฐ€ ์ดˆ๊ธฐํ™”๋˜๋ฉด TDZ๋ฅผ ๋ฒ—์–ด๋‚˜ ์ •์ƒ์ ์œผ๋กœ ์‚ฌ์šฉ ๊ฐ€๋Šฅ.
์‰ฝ๊ฒŒ ๋งํ•˜๋ฉด, ๋ณ€์ˆ˜๊ฐ€ ์ƒ์„ฑ(=๋ณ€์ˆ˜์„ ์–ธ)๋˜๊ณ  ๋ฉ”๋ชจ๋ฆฌ์— ์ฒ˜์Œ ๊ฐ’์ด ์ €์žฅ(=์ดˆ๊ธฐํ™”) ๋  ๋•Œ๊นŒ์ง€์˜ ์˜์—ญ์œผ๋กœ
๋ฉ”๋ชจ๋ฆฌ์— ์ดˆ๊ธฐ ๊ฐ’์ด ์—†๋Š” ์ƒํƒœ์—์„œ ์ ‘๊ทผํ•˜๋ ค๊ณ  ํ•˜๋ฉด ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค๋Š” ๊ฒƒ!

 

  • *ES6์˜ let๊ณผ const๋Š” ๋ณ€์ˆ˜๋ฅผ ๋ธ”๋ก์˜ ์ƒ๋‹จ์œผ๋กœ ํ˜ธ์ด์ŠคํŒ… ํ•˜์ง€๋งŒ ์ดˆ๊ธฐํ™”ํ•˜์ง€๋Š” ์•Š์Œ! ๋ณ€์ˆ˜๊ฐ€ ์„ ์–ธ๋˜๊ธฐ ์ „์— ๋ธ”๋ก ์•ˆ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋Š”๋ฐ, ์ด ์œ„์น˜๋ฅผ ์‹œ๊ฐ„์ƒ ์‚ฌ๊ฐ์ง€๋Œ€(Temporal Dead Zone, TDZ)๋ผ๊ณ  ํ‘œํ˜„. (ReferenceError ๋ฐœ์ƒ)
  • ์ฐธ๊ณ ๋กœ var ์„ ์–ธ์˜ ๊ฒฝ์šฐ undefined๋กœ ์ดˆ๊ธฐํ™” ๋˜๊ธฐ ๋•Œ๋ฌธ์— TDZ๊ฐ€ ์—†์Œ!_!

 

TDZ์— ๋Œ€ํ•ด์„œ ์กฐ๊ธˆ ๋” ์ž์„ธํžˆ ์•Œ๊ณ ์‹ถ๋‹ค๋ฉด ์ด์ „ ์ •๋ฆฌ๊ธ€ ์ฐธ๊ณ !
 

[JavaScript] TDZ(Temporal Dead Zone) : ๋ณ€์ˆ˜์˜ ์‹œ๊ฐ„ ์—ฌํ–‰~

๐Ÿฃ ๋ณ€์ˆ˜์˜ ์‹œ๊ฐ„ ์—ฌํ–‰! Temporal Dead Zone!์˜ค๋Š˜์€ TDZ์— ๋Œ€ํ•ด์„œ ์‚ดํŽด๋ณด๋„๋ก ํ•˜๊ฒ ๋‹ค. Temporal Dead Zone, TDZ! ๋„Œ ๋ฌด์—‡์ด๋‹ˆ!?  ๐Ÿฃ TDZ ๋ž€?1. ๊ฐœ๋… TDZ(Temporal Dead Zone)๋Š” ๋ณ€์ˆ˜๊ฐ€ ์„ ์–ธ๋œ ์œ„์น˜๋ถ€ํ„ฐ ์ดˆ๊ธฐํ™”๋  ๋•Œ๊นŒ์ง€

haileyham.tistory.com

 


์ด์ œ ํ˜ธ์ด์ŠคํŒ…๊ณผ TDZ๊นŒ์ง€ ์‰ฝ๊ฒŒ ์„ค๋ช… ๊ฐ€๋Šฅ!

 

 

Contents

ํฌ์ŠคํŒ… ์ฃผ์†Œ๋ฅผ ๋ณต์‚ฌํ–ˆ์Šต๋‹ˆ๋‹ค

์ด ๊ธ€์ด ๋„์›€์ด ๋˜์—ˆ๋‹ค๋ฉด ๊ณต๊ฐ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค.