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)์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Œ

    let userName = 'Ella';
    
    function showMessage() {
      let message = 'Hello, ' + userName;
      console.log(message);
    }
    
    showMessage(); // Hello, Ella
  • ์™ธ๋ถ€ ๋ณ€์ˆ˜ ์ ‘๊ทผ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์ˆ˜์ •๋„ ๊ฐ€๋Šฅ

    let userName = 'Ella'
    
    function showMessage() {
      userName = 'Chloe'; // ์™ธ๋ถ€ ๋ณ€์ˆ˜ ์ˆ˜์ •
      let message = 'Hello, ' + userName;
      console.log(message);
    }
    
    console.log(userName); // ํ•จ์ˆ˜ ํ˜ธ์ถœ ์ „์ด๋ฏ€๋กœ Ella ์ถœ๋ ฅ
    
    showMessage(); // Hello, Chloe: ํ•จ์ˆ˜ ํ˜ธ์ถœ
    console.log(userName); // ํ•จ์ˆ˜์— ์˜ํ•ด Chloe ์ถœ๋ ฅ
  • ์™ธ๋ถ€ ๋ณ€์ˆ˜๋Š” ์ง€์—ญ ๋ณ€์ˆ˜๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ์—๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅ. ํ•จ์ˆ˜ ๋‚ด๋ถ€์— ์™ธ๋ถ€ ๋ณ€์ˆ˜์™€ ๋™์ผํ•œ ์ด๋ฆ„์„ ๊ฐ€์ง„ ๋ณ€์ˆ˜๊ฐ€ ์„ ์–ธ๋˜์—ˆ๋‹ค๋ฉด, ๋‚ด๋ถ€ ๋ณ€์ˆ˜๋Š” ์™ธ๋ถ€ ๋ณ€์ˆ˜๋ฅผ ๊ฐ€๋ฆผ.

    let userName = 'Ella';
    
    function showMessage() {
      let userName = 'Chloe'; // ๊ฐ™์€ ์ด๋ฆ„์„ ๊ฐ€์ง„ ์ง€์—ญ ๋ณ€์ˆ˜ ์„ ์–ธ
    
      let message = 'Hello, ' + userName; // Hello, Chloe: ์™ธ๋ถ€ ๋ณ€์ˆ˜์ธ Ella๋Š” ๋‚ด๋ถ€ ๋ณ€์ˆ˜์ธ Chloe์— ๊ฐ€๋ ค์ง
      console.log(message);
    }
    
    showMessage(); // ํ•จ์ˆ˜๋Š” ๋‚ด๋ถ€ ๋ณ€์ˆ˜์ธ userName๋งŒ ์‚ฌ์šฉ
    console.log(userName); // Ella : ํ•จ์ˆ˜๋Š” ์™ธ๋ถ€๋ณ€์ˆ˜์— ์ ‘๊ทผํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ๊ฐ’์ด ๋ณ€๊ฒฝ๋˜์ง€ ์•Š๊ณ  Ella ์ถœ๋ ฅ

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

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

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

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

    function showMessage(from, text) { // ์ธ์ž: from, text
      console.log(from + ': ' + text);
    } 
    
    showMessage ('Ella', 'Hello'); // Ella: Hello! (*)
    showMessage ('Chloe', 'Hello'); // Chloe: Hello! (**)
  • ์ •๋ฆฌํ•˜์ž๋ฉด, ๋งค๊ฐœ๋ณ€์ˆ˜, ์ธ์ž(parameter) ๋Š” ํ•จ์ˆ˜ ์„ ์–ธ ๋ฐฉ์‹ ๊ด„ํ˜ธ ์‚ฌ์ด์— ์žˆ๋Š” ๋ณ€์ˆ˜์˜ ๊ฐ’์œผ๋กœ, ์„ ์–ธ ์‹œ ์‚ฌ์šฉ๋˜๋Š” ์šฉ์–ด๋‹ค. ์ธ์ˆ˜(argument) ๋Š” ํ•จ์ˆ˜์˜ ๋งค๊ฐœ๋ณ€์ˆ˜์— ์ „๋‹ฌ๋œ ๊ฐ’์„ ๋งํ•˜๋ฉฐ, ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ ์‚ฌ์šฉ๋œ๋‹ค. ์ฆ‰, ํ•จ์ˆ˜ ์„ ์–ธ ์‹œ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๋‚˜์—ดํ•˜๊ณ , ํ•จ์ˆ˜ ํ˜ธ์ถœ ์‹œ ์ธ์ž๋ฅผ ์ „๋‹ฌํ•ด ํ˜ธ์ถœํ•œ๋‹ค.

5. ๊ธฐ๋ณธ๊ฐ’

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

    function showMessage(from, text = 'please enter your last name') {
      console.log(from + " " + text);
    }
    
    showMessage("Ella"); // Ella: please enter your last name: text๊ฐ€ ๊ฐ’์„ ์ „๋‹ฌ๋ฐ›์ง€ ๋ชปํ•ด๋„ ๊ธฐ๋ณธ๊ฐ’์ด ํ• ๋‹น
  • ์•„๋ž˜์™€ ๊ฐ™์ด ๋ณต์žกํ•œ ํ‘œํ˜„์‹๋„ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ์„ค์ • ๊ฐ€๋Šฅํ•˜๋‹ค.

    function showMessage(from, text = anotherFunction()) {
      // anotherFunction()์€ text๊ฐ’์ด ์—†์„ ๋•Œ๋งŒ ํ˜ธ์ถœ๋จ
      // anotherFunction()์˜ ๋ฐ˜ํ™˜ ๊ฐ’์ด text์˜ ๊ฐ’์ด ๋จ
    }

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

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

    function showMessage(text) {
      // ...
    
      if (text === undefined) { // ๋งค๊ฐœ๋ณ€์ˆ˜ ์ƒ๋žต ์‹œ
          text = '๋นˆ ๋ฌธ์ž์—ด';
      }
      console.log(text);
    }
    showMessage(); // ๋นˆ ๋ฌธ์ž์—ด
  • if๋ฌธ ๋Œ€์‹  ๋…ผ๋ฆฌ ์—ฐ์‚ฐ์ž || ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋ฉฐ, ์•„๋ž˜ ์˜ˆ์‹œ๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜ ์ƒ๋žต ํ˜น์€ ๋นˆ ๋ฌธ์ž์—ด์ด ๋„˜์–ด์˜ค๋ฉด ๋ณ€์ˆ˜์— '๋นˆ ๋ฌธ์ž์—ด'์ด ํ• ๋‹น๋˜๋„๋ก ํ–ˆ๋‹ค.

    function showMessage(text) {
        text = text || '๋นˆ ๋ฌธ์ž์—ด';
    }

7. ๋ฐ˜ํ™˜๊ฐ’

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

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

    function sum(a, b) {
      return a + b;
    }
    
    let result = sum(1, 2); // return์—์„œ ๋ฐ˜ํ™˜ํ•œ ๊ฐ’์„ result์— ํ• ๋‹น
    console.log(result); // 3
  • ์•„๋ž˜์™€ ๊ฐ™์ด ํ•จ์ˆ˜ ํ•˜๋‚˜์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ return๋ฌธ์ด ์˜ฌ ์ˆ˜๋„ ์žˆ๋‹ค.

      function checkAge(age) {
          if (age >= 18) {
              return true;
          } else {
              return confirm('๋ณดํ˜ธ์ž์˜ ๋™์˜๋ฅผ ๋ฐ›์œผ์…จ๋‚˜์š”?');
          }
      }
    
      let age = prompt('๋‚˜์ด๋ฅผ ์ž…๋ ฅํ•ด ์ฃผ์„ธ์š”', 18);
    
      if (checkAge(age)) {
          alert('์ ‘์† ํ—ˆ์šฉ');
      } else {
          alert('์ ‘์† ์ฐจ๋‹จ');
      }
  • cf. return๋ฌธ์ด ์—†๋Š” ํ•จ์ˆ˜๋Š” undefined๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

    function doNothing() { /*empty */ }
    console.log(doNothing() === undefined); // true
  • cf. return ์ง€์‹œ์ž๋งŒ ์žˆ๋Š” ๊ฒฝ์šฐ๋„ undefined๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. return์€ return undefined์™€ ๋™์ผํ•˜๊ฒŒ ๋™์ž‘ํ•œ๋‹ค.

    function donNothin() {
        return;
    }
    console.log(doNothing() === undefined); // true
  • caution) return๊ณผ ๊ฐ’ ์‚ฌ์ด์—๋Š” ์ ˆ๋Œ€ ์ƒˆ ์ค„์„ ๋„ฃ์–ด ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋ฉด ์•ˆ๋œ๋‹ค. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” return๋ฌธ ๋์— ์ž๋™์œผ๋กœ ์„ธ๋ฏธ์ฝœ๋ก ์„ ๋„ฃ๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ˜ํ™˜ํ•˜๊ณ ์ž ํ–ˆ๋˜ ํ‘œํ˜„์‹์„ ๋ฐ˜ํ™˜ํ•˜์ง€ ๋ชปํ•œ๋‹ค.

    // ์˜ˆ๋ฅผ ๋“ค๋ฉด ์ด๋Ÿฐ ์ฝ”๋“œ๋ฅผ
    return;
    (1 + 2 + 3 + 4 + 5 + 6)
    
    // ํ‘œํ˜„์‹์„ ์—ฌ๋Ÿฌ ์ค„์— ๊ฑธ์ณ ์ž‘์„ฑํ•˜๊ณ ์ž ํ•œ๋‹ค๋ฉด, ์•„๋ž˜์™€ ๊ฐ™์ด ์—ฌ๋Š” ๊ด„ํ˜ธ๋ฅผ return๊ณผ ๊ฐ™์€ ์ค„์— ์“ฐ๊ฑฐ๋‚˜, return์ด ์žˆ๋Š” ์ค„์—์„œ ํ‘œํ˜„์‹์„ ์ž‘์„ฑํ•ด์•ผ ํ•œ๋‹ค.
    return (
      1 + 2 + 3
      + 4 + 5 + 6
    );

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

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

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

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

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

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

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

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

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

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

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

Last updated