λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

JavaScript

[λ‚΄λ³΄λ‚΄λ²ˆ] JavaScript - Function Declarations vs. Function Expressions

GitHub에 μžˆλŠ” 33 Concepts Every JavaScript Developer Should Know λΌλŠ” λ¦¬ν¬μ§€ν† λ¦¬μ˜ λ‚΄μš© 쀑 κ³΅λΆ€ν•˜κ³  싢은 아티클을 λ‚΄κ°€ 정리할 κ²Έ κΈ°μ–΅ν•  κ²Έ μž‘μ„±ν•˜λŠ” λ²ˆμ—­κΈ€μ΄λ‹€. 33가지 쀑 두 번째인 κΈ°λ³Έν˜•κ³Ό κ΄€λ ¨λœ λ‚΄μš©μ΄λ‹€.

β€» λ‚΄λ³΄λ‚΄λ²ˆ(λ‚΄κ°€ 보렀고 λ‚΄κ°€ λ²ˆμ—­ν•œ): μ˜μ–΄ μ „κ³΅μžλ„ ν•΄μ™Έ μœ ν•™νŒŒλ„ μ•„λ‹ˆκΈ°μ— λ²ˆμ—­μ—λŠ” μ˜μ—­, μ˜€μ—­, κ΅¬κΈ€ λ²ˆμ—­μ΄ λ¬΄μˆ˜νžˆ λ§Žμ„ 수 있으며, μ˜€νƒ€λ„ λ§Žμ„ 수 μžˆλ‹€. μ •ν™•ν•œ λ‚΄μš©μ€ 원문을 직접 μ‚΄νŽ΄λ³΄κ±°λ‚˜ λ‹€λ₯Έ 정보듀을 더 μ°Ύμ•„λ³΄λŠ” 것을 μΆ”μ²œν•œλ‹€.
(ν•˜μ§€λ§Œ λŒ“κΈ€ ν”Όλ“œλ°±λ„ ν™˜μ˜ν•©λ‹ˆλ‹€πŸ˜ƒ )

μ΄λ²ˆμ— κ³ λ₯Έ 아티클은 Mandeep Singh λ‹˜μ΄ μž‘μ„±ν•˜μ‹  Function Declarations vs. Function Expressions μ΄λ‹€. λ‚΄μš© 쀑간 쀑간 πŸ€”이 μ•„μ΄μ½˜μ€ 본문에 λ‚˜μ™€ μžˆμ§€ μ•Šμ€ λ²ˆμ—­ν•˜λ©° μΆ”κ°€ν•œ 말이닀.

 

Function Declarations vs. Function Expressions

What is Function Statement/Declarations in JavaScript?

medium.com


μžλ°”μŠ€ν¬λ¦½νŠΈμ—μ„œ ν•¨μˆ˜λ¬Έ(Statement)/μ„ μ–Έλ¬Έ(Declarations)μ΄λž€?

ν•¨μˆ˜λ¬Έμ€ ν•¨μˆ˜λ₯Ό μ •μ˜ν•œλ‹€. 

μ •μ˜λœ ν•¨μˆ˜λŠ” "λ‚˜μ€‘μ— μ‚¬μš©λ˜κΈ° μœ„ν•΄ μ €μž₯"되며, 후에 호좜될 λ•Œ 싀행될 것이닀. 

λ³€μˆ˜ μ •μ˜λŠ” var둜 μ‹œμž‘ν•΄μ•Όλ˜λŠ” κ²ƒμ²˜λŸΌ, ν•¨μˆ˜ μ •μ˜λŠ” "function"으둜 μ‹œμž‘λ˜μ–΄μ•Όν•œλ‹€. 

μ˜ˆμ‹œ.

function bar() {
  return 3;
}
  • ν•¨μˆ˜λŠ” μ΄κ³³μ—λ§Œ μ •μ˜λ˜μ–΄ μžˆλ‹€. ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜κΈ° μœ„ν•΄μ„œλŠ” ν•¨μˆ˜ 이름을 μ‚¬μš©ν•˜μ—¬ ν˜ΈμΆœλ˜μ–΄μ•Ό ν•œλ‹€. μ˜ˆμ‹œ. bar();

 

ν•¨μˆ˜ ν‘œν˜„μ‹μ΄λž€?

μžλ°”μŠ€ν¬λ¦½νŠΈ ν•¨μˆ˜λŠ” ν‘œν˜„μ‹μ„ μ‚¬μš©ν•˜μ—¬ μ •μ˜λ  수 μžˆλ‹€. 

ν•¨μˆ˜ ν‘œν˜„μ‹μ€ λ³€μˆ˜μ— μ €μž₯될 수 μžˆλ‹€: 

var x = function (a, b) {return a * b};

ν•¨μˆ˜ ν‘œν˜„μ‹μ΄ λ³€μˆ˜μ— μ €μž₯되고 λ‚œ 후에, λ³€μˆ˜λŠ” ν•¨μˆ˜λ‘œμ„œ μ‚¬μš©λ  수 μžˆλ‹€. λ³€μˆ˜μ— μ €μž₯된 ν•¨μˆ˜λŠ” ν•¨μˆ˜ 이름이 ν•„μš”ν•˜μ§€ μ•Šλ‹€. 항상 λ³€μˆ˜ μ΄λ¦„μœΌλ‘œ ν˜ΈμΆœλ˜μ–΄μ§„λ‹€. 

 

ν•¨μˆ˜ ν‘œν˜„μ‹ VS. ν•¨μˆ˜λ¬Έ(Statement)

μ˜ˆμ‹œ: ν•¨μˆ˜ ν‘œν˜„μ‹

alert(foo()); // ERROR! foo wasn't loaded yet
var foo = function() { return 5; }

μ˜ˆμ‹œ: ν•¨μˆ˜ μ„ μ–Έλ¬Έ

alert(foo()); // Alerts 5. Declarations are loaded before any code can run.
function foo() { return 5; }
  • ν•¨μˆ˜ 선언문은 λ‹€λ₯Έ μ½”λ“œκ°€ μ‹€ν–‰λ˜κΈ° 전에 λ‘œλ“œλ˜λŠ” 반면 ν•¨μˆ˜ ν‘œν˜„μ‹μ€ 인터프리터가 μ½”λ“œμ˜ ν•΄λ‹Ή 라인에 λ„λ‹¬ν•΄μ•Όλ§Œ λ‘œλ“œλœλ‹€. 
  • var λ¬Έκ³Ό λΉ„μŠ·ν•˜κ²Œ, ν•¨μˆ˜ 선언문은 λ‹€λ₯Έ μ½”λ“œλ“€ μœ„λ‘œ ν˜Έμ΄μŠ€νŒ…λœλ‹€. ν•¨μˆ˜ ν‘œν˜„μ‹μ€ ν˜Έμ΄μŠ€νŒ…λ˜μ§€ μ•ŠμœΌλ―€λ‘œ ν•¨μˆ˜ ν‘œν˜„μ‹μ΄ μ •μ˜λœ μŠ€μ½”ν”„μ˜ 지역 λ³€μˆ˜μ˜ 볡사본을 μœ μ§€ν•  수 μžˆλ‹€. 

 

ν•¨μˆ˜ ν‘œν˜„μ‹μ˜ 이점

μ•„λž˜μ˜ λ‚΄μš©λ“€μ€ ν•¨μˆ˜ ν‘œν˜„μ‹μ΄ ν•¨μˆ˜ 선언식보닀 더 μœ μš©ν•΄μ§ˆ 수 μžˆλŠ” λͺ‡ 가지 λ‹€λ₯Έ μ΄μœ λ“€μ΄λ‹€. 

  • ν΄λ‘œμ €
  • λ‹€λ₯Έ ν•¨μˆ˜μ˜ 인수
  • μ¦‰μ‹œ 호좜 ν•¨μˆ˜ ν‘œν˜„μ‹(IIFE)

Credits : Angus Croll , www.sitepoint.com