λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
πŸ‘¨‍πŸ’» web.dev/js.ts

[JavaScript] 읡λͺ…ν•¨μˆ˜μ™€ κΈ°λͺ…ν•¨μˆ˜, μ–Έμ œ μ¨μ•Όν• κΉŒ?

by HandHand 2022. 2. 20.

읡λͺ…ν•¨μˆ˜μ™€ κΈ°λͺ…ν•¨μˆ˜ μ–Έμ œ μ¨μ•Όν• κΉŒ?

πŸ“Œ 읡λͺ…ν•¨μˆ˜μ™€ κΈ°λͺ…ν•¨μˆ˜

Javascript μ—μ„œ ν•¨μˆ˜λ₯Ό μ •μ˜ν•  λ•Œ ν•¨μˆ˜μ˜ 이름을 μ§€μ •ν•˜μ§€ μ•ŠλŠ” 읡λͺ…ν•¨μˆ˜ 와

κ·Έ λ°˜λŒ€μΈ κΈ°λͺ…ν•¨μˆ˜ λ°©μ‹μœΌλ‘œ μ •μ˜λ₯Ό ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

function getUserName() { /** κΈ°λͺ…ν•¨μˆ˜ */ }

const getUserName = function() { /** 읡λͺ…ν•¨μˆ˜ */ }

μœ„ μ˜ˆμ‹œμ½”λ“œμ—μ„œ κΈ°λͺ…ν•¨μˆ˜ λŠ” ν•¨μˆ˜ μ„ μ–Έλ¬Έ 이고 읡λͺ…ν•¨μˆ˜ λŠ” ν•¨μˆ˜ ν‘œν˜„μ‹ λ°©μ‹μž…λ‹ˆλ‹€.

 

πŸ“Œ 이 λ‘˜μ˜ 차이점은?

μœ„ μ„ μ–Έ 방식은 각 ν•¨μˆ˜κ°€ ν˜ΈμΆœλ˜λŠ” μ‹œμ μ— 차이가 λ°œμƒν•©λ‹ˆλ‹€.

κ°„λ‹¨ν•œ μ˜ˆμ‹œλ₯Ό 톡해 각 ν•¨μˆ˜λ“€μ˜ 호좜 방식을 μ‚΄νŽ΄λ³΄κ² μŠ΅λ‹ˆλ‹€.

읡λͺ…ν•¨μˆ˜μ™€ ν˜Έμ΄μŠ€νŒ…

func(); // TypeError: func is not a function

var func = function() {
  console.log("읡λͺ…ν•¨μˆ˜");
};

읡λͺ…ν•¨μˆ˜λŠ” ν˜Έμ΄μŠ€νŒ…μ— 영ν–₯을 받지 μ•ŠλŠ”λ‹€ λŠ” νŠΉμ§•μ„ 가지고 μžˆμŠ΅λ‹ˆλ‹€.

μ‹€μ œλ‘œ func κ°€ ν˜Έμ΄μŠ€νŒ…μ΄ λ˜μ§€ μ•ŠλŠ” 것은 μ•„λ‹™λ‹ˆλ‹€.

λ‹€λ§Œ undefined 둜 μ΄ˆκΈ°ν™”λ˜μ–΄μžˆκΈ° λ•Œλ¬Έμ—

ν•¨μˆ˜ μ„ μ–Έ 이전에 μ˜ˆμƒμΉ˜ λͺ»ν•˜κ²Œ 호좜이 λ˜λŠ” 것을 방지할 수 μžˆμŠ΅λ‹ˆλ‹€.

κΈ°λͺ…ν•¨μˆ˜μ™€ ν˜Έμ΄μŠ€νŒ…

func() // κΈ°λͺ…ν•¨μˆ˜

function func() {
    console.log("κΈ°λͺ…ν•¨μˆ˜")
}

반면 κΈ°λͺ…ν•¨μˆ˜ λŠ” ν˜Έμ΄μŠ€νŒ…μ— 영ν–₯을 λ°›μ•„ ν•¨μˆ˜ μ„ μ–ΈλΆ€κ°€ λŒμ–΄μ˜¬λ €μ Έμ„œ

μ‹€μ œ ν•¨μˆ˜ μ„ μ–Έ μœ„μΉ˜λ³΄λ‹€ 이전에 ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•΄λ„ λ¬Έμ œκ°€ λ°œμƒν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

μ΄λŠ” ν•¨μˆ˜ μ„ μ–Έ 및 ν˜ΈμΆœλ°©μ‹μ—μ„œ μœ μ—°μ„±μ„ 뢀여해쀄 μˆ˜λ„ μžˆμ§€λ§Œ

μ˜λ„ν•˜μ§€ μ•Šμ€ ν•¨μˆ˜ ν˜ΈμΆœμ„ ν—ˆμš©ν• μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.

 

πŸ“Œ κ·Έλ ‡λ‹€λ©΄ μ–Έμ œ 무엇을 μ¨μ•Όν• κΉŒ?

κ·Έλ ‡λ‹€λ©΄ μœ„ 두 ν•¨μˆ˜ μ„ μ–Έ 방식은 μ–Έμ œ μ‚¬μš©ν•˜λŠ” 것이 μ’‹μ„κΉŒμš”?

μ‚¬μš©ν•˜λŠ” μ‚¬λžŒλ§ˆλ‹€ 의견이 λ‹€λ₯Ό 수 μžˆμ§€λ§Œ μ €λŠ” ν•¨μˆ˜ μž¬μ‚¬μš©μ„± κ³Ό κΈ°λŠ₯ 에 μ΄ˆμ μ„ 두고 μ •μ˜ν•©λ‹ˆλ‹€.

λ§Œμ•½ ν•΄λ‹Ή ν•¨μˆ˜κ°€ μž¬μ‚¬μš©λ  κ°€λŠ₯성이 μžˆκ±°λ‚˜ λΆ„λͺ…ν•œ λͺ©μ μœΌλ‘œ μ •μ˜λ  ν•„μš”κ°€ μžˆλŠ” ν•¨μˆ˜λΌλ©΄

ν•¨μˆ˜ μ„ μ–Έλ¬Έ 을 μ΄μš©ν•΄μ„œ κΈ°λͺ… ν•¨μˆ˜ 둜 μ •μ˜ν•©λ‹ˆλ‹€.

λ°˜λŒ€λ‘œ μž¬μ‚¬μš©λ  ν•„μš”κ°€ μ—†λŠ” ν•¨μˆ˜λ“€μ˜ κ²½μš°μ—λŠ” 읡λͺ… ν•¨μˆ˜ λ₯Ό μ‚¬μš©ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€.

이 경우 IIFE (μ¦‰μ‹œ μ‹€ν–‰ ν•¨μˆ˜) λ‚˜ 콜백 ν•¨μˆ˜ , ν˜Ήμ€ ν΄λ‘œμ € 생성 을 μœ„ν•œ λͺ©μ μœΌλ‘œ μ‚¬μš©ν•©λ‹ˆλ‹€.

 

참고자료

[JavaScript] ν•¨μˆ˜μ„ μ–Έμ‹(Function Declaration)κ³Ό ν•¨μˆ˜ν‘œν˜„μ‹(Function Expression)

javascript ν•¨μˆ˜μ™€ ν˜Έμ΄μŠ€νŒ…

Anonymous Functions vs Named Functions vs Arrow Functions

읡λͺ… ν•¨μˆ˜(Anonymous Function)에 λŒ€ν•˜μ—¬

λ°˜μ‘ν˜•

πŸ’¬ λŒ“κΈ€