Function

  • ํ•จ์ˆ˜๋Š” ์œ ์‚ฌํ•œ ๋™์ž‘์„ ํ•˜๋Š” ์ฝ”๋“œ๊ฐ€ ์—ฌ๋Ÿฌ ๊ณณ์—์„œ ํ•„์š”ํ•  ๋•Œ๊ฐ€ ๋งŽ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์‚ฌ์šฉ์ž๊ฐ€ ๋กœ๊ทธ์ธ์ด๋‚˜ ๋กœ๊ทธ์•„์›ƒ์„ ํ•  ๋•Œ ์•ˆ๋‚ด ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” ๋™์ž‘ ๋“ฑ. ๋”๋ถˆ์–ด, ํ•จ์ˆ˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ๊ตฌ์„ฑํ•˜๋Š” ์ฃผ์š” '๊ตฌ์„ฑ ์š”์†Œ'์ด๋ฉฐ, ์ค‘๋ณต ์—†์ด ์œ ์‚ฌํ•œ ๋™์ž‘์„ ํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์—ฌ๋Ÿฌ ๋ฒˆ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋‹ค.

1. ํ•จ์ˆ˜ ์„ ์–ธ๋ฌธ

  • function ํ‚ค์›Œ๋“œ, ํ•จ์ˆ˜ ์ด๋ฆ„, ๊ด„ํ˜ธ๋กœ ๋‘˜๋Ÿฌ์‹ผ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ฐจ๋ก€๋กœ ์จ์ฃผ๋ฉด ๋œ๋‹ค. ๋งŒ์•ฝ ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ๋ผ๋ฉด ์ฝค๋งˆ๋กœ ๊ตฌ๋ถ„ํ•ด ์ค€๋‹ค.

  • ์ด์–ด์„œ ํ•จ์ˆ˜๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ์ฝ”๋“œ์˜ ๋ชจ์ž„์ธ ํ•จ์ˆ˜์˜ ๋ณธ๋ฌธ(body)์„ ์ค‘๊ด„ํ˜ธ๋กœ ๊ฐ์‹ผ๋‹ค.

    function name(parameter1, parameter2) {
      // ํ•จ์ˆ˜ ๋ณธ๋ฌธ
    }

2. ์ง€์—ญ ๋ณ€์ˆ˜

  • ํ•จ์ˆ˜ ๋‚ด์—์„œ ์„ ์–ธํ•œ ๋ณ€์ˆ˜์ธ ์ง€์—ญ ๋ณ€์ˆ˜(local variable)๋Š” ํ•จ์ˆ˜ ์•ˆ์—์„œ๋งŒ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.

    function showMessage() {
      let message = 'hello'; // ์ง€์—ญ๋ณ€์ˆ˜
      console.log(message);
    }
    
    showMessage(); // 'hello'
    console.log(message); // ReferenceError: message is not defined (message๋Š” ํ•จ์ˆ˜ ๋‚ด ์ง€์—ญ ๋ณ€์ˆ˜์ด๊ธฐ ๋•Œ๋ฌธ)

3. ์™ธ๋ถ€ ๋ณ€์ˆ˜

  • ํ•จ์ˆ˜ ๋‚ด๋ถ€์—์„œ ํ•จ์ˆ˜ ์™ธ๋ถ€ ๋ณ€์ˆ˜์ธ ์™ธ๋ถ€ ๋ณ€์ˆ˜(outer variable)์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Œ

  • ์™ธ๋ถ€ ๋ณ€์ˆ˜ ์ ‘๊ทผ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์ˆ˜์ •๋„ ๊ฐ€๋Šฅ

  • ์™ธ๋ถ€ ๋ณ€์ˆ˜๋Š” ์ง€์—ญ ๋ณ€์ˆ˜๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ์—๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅ. ํ•จ์ˆ˜ ๋‚ด๋ถ€์— ์™ธ๋ถ€ ๋ณ€์ˆ˜์™€ ๋™์ผํ•œ ์ด๋ฆ„์„ ๊ฐ€์ง„ ๋ณ€์ˆ˜๊ฐ€ ์„ ์–ธ๋˜์—ˆ๋‹ค๋ฉด, ๋‚ด๋ถ€ ๋ณ€์ˆ˜๋Š” ์™ธ๋ถ€ ๋ณ€์ˆ˜๋ฅผ ๊ฐ€๋ฆผ.

    cf. userName์ฒ˜๋Ÿผ ํ•จ์ˆ˜ ์™ธ๋ถ€์— ์„ ์–ธ๋œ ๋ณ€์ˆ˜๋Š” ์ „์—ญ๋ณ€์ˆ˜(global variable)์ด๋ผ๊ณ  ํ•˜๋ฉฐ, ์ง€์—ญ๋ณ€์ˆ˜์— ์˜ํ•ด ๊ฐ€๋ ค์ง€์ง€๋งŒ ์•Š๋Š”๋‹ค๋ฉด ๋ชจ๋“  ํ•จ์ˆ˜์—์„œ ์ ‘๊ทผ ๊ฐ€๋Šฅ. ํ•˜์ง€๋งŒ ๋ณ€์ˆ˜๋Š” ์—ฐ๊ด€๋˜๋Š” ํ•จ์ˆ˜ ๋‚ด์—์„œ๋งŒ ์„ ์–ธํ•˜๊ณ , ๋˜๋„๋ก ์‚ฌ์šฉ์„ ๊ถŒํ•˜์ง€ ์•Š์Œ.

4. ๋งค๊ฐœ ๋ณ€์ˆ˜

  • ๋งค๊ฐœ๋ณ€์ˆ˜(parameter, ์ธ์ž)๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ž„์˜์˜ ๋ฐ์ดํ„ฐ๋ฅผ ํ•จ์ˆ˜ ์•ˆ์— ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ์Œ.

  • ์•„๋ž˜ ์ฝ”๋“œ์—์„œ (*), (**) ๋กœ ํ‘œ์‹œํ•œ ์ค„์—์„œ ํ•จ์ˆ˜ ํ˜ธ์ถœ ์‹œ, ํ•จ์ˆ˜์— ์ „๋‹ฌ๋œ ์ธ์ž๋Š” ์ง€์—ญ๋ณ€์ˆ˜ from๊ณผ text์— ๊ฐ๊ฐ ๋ณต์‚ฌ๋จ. ์ดํ›„ ํ•จ์ˆ˜๋Š” ์ง€์—ญ๋ณ€์ˆ˜์— ๋ณต์‚ฌ๋œ ๊ฐ’์„ ์‚ฌ์šฉ

  • ์ •๋ฆฌํ•˜์ž๋ฉด, ๋งค๊ฐœ๋ณ€์ˆ˜, ์ธ์ž(parameter) ๋Š” ํ•จ์ˆ˜ ์„ ์–ธ ๋ฐฉ์‹ ๊ด„ํ˜ธ ์‚ฌ์ด์— ์žˆ๋Š” ๋ณ€์ˆ˜์˜ ๊ฐ’์œผ๋กœ, ์„ ์–ธ ์‹œ ์‚ฌ์šฉ๋˜๋Š” ์šฉ์–ด๋‹ค. ์ธ์ˆ˜(argument) ๋Š” ํ•จ์ˆ˜์˜ ๋งค๊ฐœ๋ณ€์ˆ˜์— ์ „๋‹ฌ๋œ ๊ฐ’์„ ๋งํ•˜๋ฉฐ, ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ ์‚ฌ์šฉ๋œ๋‹ค. ์ฆ‰, ํ•จ์ˆ˜ ์„ ์–ธ ์‹œ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๋‚˜์—ดํ•˜๊ณ , ํ•จ์ˆ˜ ํ˜ธ์ถœ ์‹œ ์ธ์ž๋ฅผ ์ „๋‹ฌํ•ด ํ˜ธ์ถœํ•œ๋‹ค.

5. ๊ธฐ๋ณธ๊ฐ’

  • ๋งค๊ฐœ๋ณ€์ˆ˜์— ๊ฐ’์„ ์ „๋‹ฌํ•˜์ง€ ์•Š์•„๋„ ๊ทธ ๊ฐ’์ด undefined๊ฐ€ ๋˜์ง€ ์•Š๊ฒŒ ํ•˜๋ ค๋ฉด ํ•จ์ˆ˜ ์„ ์–ธ์‹œ = ๋ฅผ ์‚ฌ์šฉํ•ด ๊ธฐ๋ณธ๊ฐ’(default value)์„ ์„ค์ •ํ•ด ์ฃผ๋ฉด ๋œ๋‹ค.

  • ์•„๋ž˜์™€ ๊ฐ™์ด ๋ณต์žกํ•œ ํ‘œํ˜„์‹๋„ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ์„ค์ • ๊ฐ€๋Šฅํ•˜๋‹ค.

6. ๋งค๊ฐœ๋ณ€์ˆ˜ ๊ธฐ๋ณธ๊ฐ’์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋Š” ๋˜๋‹ค๋ฅธ ๋ฐฉ๋ฒ•

  • ๊ฐ€๋”์€ ํ•จ์ˆ˜ ์„ ์–ธ ์‹œ๊ฐ€ ์•„๋‹Œ, ํ•จ์ˆ˜ ์„ ์–ธ ํ›„์— ๋งค๊ฐœ๋ณ€์ˆ˜ ๊ธฐ๋ณธ๊ฐ’์„ ์„ค์ •ํ•  ๋•Œ๊ฐ€ ์žˆ์Œ. ์ด๋•Œ๋Š” ํ•จ์ˆ˜ ํ˜ธ์ถœ ์‹œ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ undefined์™€ ๋น„๊ตํ•ด ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์ž˜ ์ „๋‹ฌ๋˜์—ˆ๋Š”์ง€๋ฅผ ํ™•์ธ

  • if๋ฌธ ๋Œ€์‹  ๋…ผ๋ฆฌ ์—ฐ์‚ฐ์ž || ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋ฉฐ, ์•„๋ž˜ ์˜ˆ์‹œ๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜ ์ƒ๋žต ํ˜น์€ ๋นˆ ๋ฌธ์ž์—ด์ด ๋„˜์–ด์˜ค๋ฉด ๋ณ€์ˆ˜์— '๋นˆ ๋ฌธ์ž์—ด'์ด ํ• ๋‹น๋˜๋„๋ก ํ–ˆ๋‹ค.

7. ๋ฐ˜ํ™˜๊ฐ’

  • ํ•จ์ˆ˜ ํ˜ธ์ถœ ์‹œ, ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•œ ์ž๋ฆฌ์— ํŠน์ • ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋•Œ ์ด ํŠน์ • ๊ฐ’์„ ๋ฐ˜ํ™˜ ๊ฐ’(return value)๋ผ๊ณ  ํ•œ๋‹ค.

  • ์ง€์‹œ์ž return์€ ํ•จ์ˆ˜ ๋‚ด ์–ด๋””์„œ๋“  ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋ฉฐ, ์ด return์„ ๋งŒ๋‚˜๋ฉด ํ•จ์ˆ˜ ์‹คํ–‰์€ ์ฆ‰์‹œ ์ค‘๋‹จ๋˜๊ณ , ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•œ ๊ณณ์— ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ์•„๋ž˜ ์˜ˆ์‹œ์—์„œ๋Š” ๋ฐ˜ํ™˜ ๊ฐ’์„ result์— ํ• ๋‹นํ–ˆ๋‹ค.

  • ์•„๋ž˜์™€ ๊ฐ™์ด ํ•จ์ˆ˜ ํ•˜๋‚˜์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ return๋ฌธ์ด ์˜ฌ ์ˆ˜๋„ ์žˆ๋‹ค.

  • cf. return๋ฌธ์ด ์—†๋Š” ํ•จ์ˆ˜๋Š” undefined๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

  • cf. return ์ง€์‹œ์ž๋งŒ ์žˆ๋Š” ๊ฒฝ์šฐ๋„ undefined๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. return์€ return undefined์™€ ๋™์ผํ•˜๊ฒŒ ๋™์ž‘ํ•œ๋‹ค.

  • caution) return๊ณผ ๊ฐ’ ์‚ฌ์ด์—๋Š” ์ ˆ๋Œ€ ์ƒˆ ์ค„์„ ๋„ฃ์–ด ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋ฉด ์•ˆ๋œ๋‹ค. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” return๋ฌธ ๋์— ์ž๋™์œผ๋กœ ์„ธ๋ฏธ์ฝœ๋ก ์„ ๋„ฃ๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ˜ํ™˜ํ•˜๊ณ ์ž ํ–ˆ๋˜ ํ‘œํ˜„์‹์„ ๋ฐ˜ํ™˜ํ•˜์ง€ ๋ชปํ•œ๋‹ค.

8. ํ•จ์ˆ˜ ์ด๋ฆ„ ์ง“๊ธฐ

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

  • ๋”๋ถˆ์–ด, ํ•จ์ˆ˜๋Š” ๋™์ž‘ ํ•˜๋‚˜๋งŒ ๋‹ด๋‹นํ•˜๋ฉฐ, ํ•ด๋‹น ๋™์ž‘์„ ์ •ํ™•ํžˆ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•˜๋Š” ๊ฒƒ์ด ๋ชฉ์ ์ด๋‹ค.

  • ํ•จ์ˆ˜๊ฐ€ ์–ด๋–ค ๋™์ž‘์„ ํ•˜๋Š”์ง€ ์ถ•์•ฝํ•ด ์„ค๋ช…ํ•˜๋Š” ๋™์‚ฌ๋ฅผ ์ ‘๋‘์–ด๋กœ ๋ถ™์—ฌ ํ•จ์ˆ˜ ์ด๋ฆ„์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ๊ด€์Šต์ด๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด,

    • "showโ€ฆ" - ๋ฌด์–ธ๊ฐ€๋ฅผ ๋ณด์—ฌ์คŒ

    • "getโ€ฆ" โ€“ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•จ

    • "calcโ€ฆ" โ€“ ๋ฌด์–ธ๊ฐ€๋ฅผ ๊ณ„์‚ฐํ•จ

    • "createโ€ฆ" โ€“ ๋ฌด์–ธ๊ฐ€๋ฅผ ์ƒ์„ฑํ•จ

    • "checkโ€ฆ" โ€“ ๋ฌด์–ธ๊ฐ€๋ฅผ ํ™•์ธํ•˜๊ณ  ๋ถˆ๋ฆฐ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•จ

9. ํ•จ์ˆ˜ == ์ฃผ์„

  • ํ•จ์ˆ˜๋ฅผ ๊ฐ„๊ฒฐํ•˜๊ฒŒ ๋งŒ๋“ค๋ฉด ํ…Œ์ŠคํŠธ์™€ ๋””๋ฒ„๊น…์ด ์‰ฌ์›Œ์ง€๋ฉฐ, ํ•จ์ˆ˜ ๊ทธ ์ž์ฒด๋กœ ์ฃผ์„์˜ ์—ญํ• ๊นŒ์ง€ ํ•ด๋‚ธ๋‹ค. ์ด๋ฅผ '์ž๊ธฐ ์„ค๋ช…์  (self-describing) ์ฝ”๋“œ' ๋ผ๊ณ  ํ•œ๋‹ค.

Last updated