Home 12์žฅ, ํ•จ์ˆ˜
Post
์ทจ์†Œ

12์žฅ, ํ•จ์ˆ˜

๐Ÿ”– 12์žฅ, ํ•จ์ˆ˜

1
๐Ÿ“Œ ๋ฐฐ์šด ๋‚ด์šฉ ๋ฐ ๊ธฐ์–ตํ•˜๊ณ  ์‹ถ์€ ๋‚ด์šฉ

ํ•จ์ˆ˜

  • ์ž๋ฐ”์Šคํฌ๋ฆฝ์—์„œ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ํ•ต์‹ฌ ๊ฐœ๋…

  • ์ผ๋ จ์˜ ๊ณผ์ •์„ ๋ฌธ์œผ๋กœ ๊ตฌํ˜„ํ•˜๊ณ  ์ฝ”๋“œ ๋ธ”๋ก์œผ๋กœ ๊ฐ์‹ธ์„œ ํ•˜๋‚˜์˜ ์‹คํ–‰ ๋‹จ์œ„๋กœ ์ •์˜ ํ•œ ๊ฒƒ

    • ๋งค๊ฐœ๋ณ€์ˆ˜: ํ•จ์ˆ˜ ๋‚ด๋ถ€๋กœ ์ž…๋ ฅ์„ ์ „๋‹ฌ๋ฐ›๋Š” ๋ณ€์ˆ˜
    • ์ธ์ˆ˜: ์ž…๋ ฅ
    • ๋ฐ˜ํ™˜๊ฐ’: ์ถœ๋ ฅ
  • ํ•จ์ˆ˜๋Š” ๊ฐ’์ด๋ฉฐ, ์—ฌ๋Ÿฌ ๊ฐœ ์กด์žฌ ํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ํŠน์ • ํ•จ์ˆ˜๋ฅผ ๊ตฌ๋ณ„ํ•˜๊ธฐ ์œ„ํ•ด ์‹๋ณ„์ž์ธ ํ•จ์ˆ˜ ์ด๋ฆ„์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ

  • ํ•จ์ˆ˜๋Š” ์ •์˜๋ฅผ ํ†ตํ•ด ์ƒ์„ฑํ•จ

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
      // ํ•จ์ˆ˜ ์ •์˜
      function add(x, y) {
        return x + y;
      }
        
      // ํ•จ์ˆ˜ ํ˜ธ์ถœ
      var result = add(2, 5);
        
      // ํ•จ์ˆ˜ add์— ์ธ์ˆ˜ 2, 5๋ฅผ ์ „๋‹ฌํ•˜๋ฉด์„œ ํ˜ธ์ถœํ•˜๋ฉด ๋ฐ˜ํ™˜๊ฐ’ 7์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
      console.log(result); // 7
    

ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ 

  • ํ•จ์ˆ˜๋Š” ํ•„์š”ํ•  ๋•Œ ์—ฌ๋Ÿฌ๋ฒˆ ํ˜ธ์ถœ ๊ฐ€๋Šฅ
  • ์ฝ”๋“œ๋ฅผ ์žฌ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ
  • ์œ ์ง€๋ณด์ˆ˜์˜ ํŽธ์˜์„ฑ ์ฆ๊ฐ€ ๋ฐ ์ฝ”๋“œ์˜ ์‹ ๋ขฐ์„ฑ, ๊ฐ€๋…์„ฑ ํ–ฅ์ƒ
  • ๊ฐ€๋…์„ฑ์ด ์ข‹์€ ์ฝ”๋“œ๊ฐ€ ์ข‹์€ ์ฝ”๋“œ

ํ•จ์ˆ˜ ๋ฆฌํ„ฐ๋Ÿด

  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ํ•จ์ˆ˜๋Š” ๊ฐ์ฒด ํƒ€์ž…์˜ ๊ฐ’

    • ํ•จ์ˆ˜ ๋ฆฌํ„ฐ๋Ÿด๋„ ํ‰๊ฐ€๋˜์–ด ๊ฐ’์„ ์ƒ์„ฑํ•จ

    • 1
      2
      3
      4
      
      // ๋ณ€์ˆ˜์— ํ•จ์ˆ˜ ๋ฆฌํ„ฐ๋Ÿด์„ ํ• ๋‹น
      var f = function add(x, y) {
        return x + y;
      };
      
  • ํ•จ์ˆ˜์˜ ๊ตฌ์„ฑ์š”์†Œ

    • ํ•จ์ˆ˜ ์ด๋ฆ„
      • ์‹๋ณ„์ž, ๋„ค์ด๋ฐ ๊ทœ์น™ ์ค€์ˆ˜
      • ํ•จ์ˆ˜ ๋ชธ์ฒด ๋‚ด์—์„œ๋งŒ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ๋Š” ์‹๋ณ„์ž
      • ํ•จ์ˆ˜ ์ด๋ฆ„ ์ƒ๋žต ๊ฐ€๋Šฅ. ์ด๋ฆ„ ์žˆ๋Š” ํ•จ์ˆ˜-> ๊ธฐ๋ช…ํ•จ์ˆ˜ / ์ด๋ฆ„ ์—†๋Š” ํ•จ์ˆ˜ -> ๋ฌด๋ช…or์ต๋ช…ํ•จ์ˆ˜
    • ๋งค๊ฐœ๋ณ€์ˆ˜ ๋ชฉ๋ก
      • 0๊ฐœ ์ด์ƒ์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์†Œ๊ด„ํ˜ธ๋กœ ๊ฐ์‹ธ๊ณ  ์‰ผํ‘œ๋กœ ๊ตฌ๋ถ„
      • ๋งค๊ฐœ๋ณ€์ˆ˜ ๋ชฉ๋ก์—๋Š” ์ˆœ์„œ์— ์˜๋ฏธ๊ฐ€ ์žˆ์Œ
      • ํ•จ์ˆ˜ ๋ชธ์ฒด ๋‚ด์—์„œ ๋ณ€์ˆ˜์™€ ๋™์ผํ•˜๊ฒŒ ์ทจ๊ธ‰. ๋„ค์ด๋ฐ ๊ทœ์น™ ์ค€์ˆ˜
    • ํ•จ์ˆ˜ ๋ชธ์ฒด
      • ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋˜์—ˆ์„ ๋•Œ ์ผ๊ด„์ ์œผ๋กœ ์‹คํ–‰๋  ๋ฌธ๋“ค์„ ํ•˜๋‚˜์˜ ์‹คํ–‰๋‹จ์œ„๋กœ ์ •์˜ํ•œ ์ฝ”๋“œ ๋ธ”๋ก
      • ํ•จ์ˆ˜ ํ˜ธ์ถœ์— ์˜ํ•ด ์‹คํ–‰
  • ํ•จ์ˆ˜์™€ ์ผ๋ฐ˜ ๊ฐ์ฒด์˜ ์ฐจ์ด์ 

    • ์ผ๋ฐ˜ ๊ฐ์ฒด๋Š” ํ˜ธ์ถœํ•  ์ˆ˜ ์—†์ง€๋งŒ ํ•จ์ˆ˜๋Š” ํ˜ธ์ถœ ๊ฐ€๋Šฅ

ํ•จ์ˆ˜ ์ •์˜

๋ณ€์ˆ˜ ์„ ์–ธ๊ณผ ํ•จ์ˆ˜ ์ •์˜

ํ•จ์ˆ˜ ์„ ์–ธ๋ฌธ์ด ํ‰๊ฐ€๋˜๋ฉด ์‹๋ณ„์ž๊ฐ€ ์•”๋ฌต์ ์œผ๋กœ ์ƒ๋žต๋˜๊ณ  ํ•จ์ˆ˜ ๊ฐ์ฒด๊ฐ€ ํ• ๋‹น๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋ณ€์ˆ˜๋Š” ์„ ์–ธ์ด๋ผ๊ณ  ํ•˜๋ฉฐ ํ•จ์ˆ˜๋Š” ์ •์˜๋ผ๊ณ  ํ•œ๋‹ค.

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

  • 1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    
    // ํ•จ์ˆ˜ ์„ ์–ธ๋ฌธ
    function add(x, y) {
      return x + y;
    }
      
    // ํ•จ์ˆ˜ ์ฐธ์กฐ
    // console.dir์€ console.log์™€๋Š” ๋‹ฌ๋ฆฌ ํ•จ์ˆ˜ ๊ฐ์ฒด์˜ ํ”„๋กœํผํ‹ฐ๊นŒ์ง€ ์ถœ๋ ฅํ•œ๋‹ค.
    // ๋‹จ, Node.js ํ™˜๊ฒฝ์—์„œ๋Š” console.log์™€ ๊ฐ™์€ ๊ฒฐ๊ณผ๊ฐ€ ์ถœ๋ ฅ๋œ๋‹ค.
    console.dir(add); // ฦ’ add(x, y)
      
    // ํ•จ์ˆ˜ ํ˜ธ์ถœ
    console.log(add(2, 5)); // 7
      
    // ํ•จ์ˆ˜ ์„ ์–ธ๋ฌธ์€ ํ•จ์ˆ˜ ์ด๋ฆ„์„ ์ƒ๋žตํ•  ์ˆ˜ ์—†๋‹ค.
    function (x, y) {
      return x + y;
    }
    // SyntaxError: Function statements require a function name
    
  • ํ•จ์ˆ˜ ์„ ์–ธ๋ฌธ์€ ํ•จ์ˆ˜ ์ด๋ฆ„์„ ์ƒ๋žตํ•  ์ˆ˜ ์—†์Œ

  • ํ•จ์ˆ˜ ์„ ์–ธ๋ฌธ์€ ํ‘œํ˜„์‹์ด ์•„๋‹Œ ๋ฌธ

    • ๋•Œ๋ฌธ์— ๋ณ€์ˆ˜์— ํ• ๋‹น ํ•  ์ˆ˜ ์—†์Œ
    • ํ•˜์ง€๋งŒ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ๋Š” ์ •์ƒ์ ์œผ๋กœ ๋™์ž‘์„ ํ•จ
      • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์ด ์ฝ”๋“œ์˜ ๋ฌธ๋งฅ์— ๋”ฐ๋ผ ๋™์ผํ•œ ํ•จ์ˆ˜ ๋ฆฌํ„ฐ๋Ÿด์„ ํ‘œํ˜„์‹์ด ์•„๋‹Œ ๋ฌธ์ธ ํ•จ์ˆ˜ ์„ ์–ธ๋ฌธ์œผ๋กœ ํ•ด์„ํ•˜๋Š” ๊ฒฝ์šฐ์™€ ํ‘œํ˜„์‹์ธ ๋ฌธ์ธ ํ•จ์ˆ˜ ๋ฆฌํ„ฐ๋Ÿด ํ‘œํ˜„์‹์œผ๋กœ ํ•ด์„ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ
      • {}๋Š” ์ค‘์˜์ ์ธ ํ‘œํ˜„. ๋ธ”๋ก๋ฌธ์ผ ์ˆ˜๋„ ์žˆ๊ณ  ๊ฐ์ฒด ๋ฆฌํ„ฐ๋Ÿด์ผ ์ˆ˜๋„ ์žˆ์Œ. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ๋Š” ์ฝ”๋“œ์˜ ๋ฌธ๋งฅ์— ๋”ฐ๋ผ ํ•ด์„์ด ๋‹ฌ๋ผ์ง
        • {}์ด ๋‹จ๋…์œผ๋กœ ์กด์žฌ ํ•  ๊ฒฝ์šฐ : ๋ธ”๋ก์œผ๋กœ ํ•ด์„
        • ๊ฐ’์œผ๋กœ ํ‰๊ฐ€๋˜์–ด์•ผํ•  ๋ฌธ๋งฅ์—์„œ ํ”ผ์—ฐ์‚ฐ์ž๋กœ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ ๊ฐ์ฒด ๋ฆฌํ„ฐ๋Ÿด๋กœ ํ•ด์„
      • ๊ธฐ๋ช… ํ•จ์ˆ˜ ๋ฆฌํ„ฐ๋Ÿด๋„ ์ค‘์˜์ ์ธ ์ฝ”๋“œ. ๋‹จ๋…์œผ๋กœ ์‚ฌ์šฉํ•˜๋ฉด ํ•จ์ˆ˜ ์„ ์–ธ๋ฌธ์œผ๋กœ ํ•ด์„ํ•˜๊ณ , ํ•จ์ˆ˜ ๋ฆฌํ„ฐ๋Ÿด์„ ๋ณ€์ˆ˜์— ํ• ๋‹นํ•˜๊ฑฐ๋‚˜ ํ”ผ์—ฐ์‚ฐ์ž๋กœ ์‚ฌ์šฉํ•˜๋ฉด ํ•จ์ˆ˜ ๋ฆฌํ„ฐ๋Ÿด ํ‘œํ˜„์‹์œผ๋กœ ํ•ด์„
  • 1
    2
    3
    4
    5
    6
    7
    8
    9
    
    // ๊ธฐ๋ช… ํ•จ์ˆ˜ ๋ฆฌํ„ฐ๋Ÿด์„ ๋‹จ๋…์œผ๋กœ ์‚ฌ์šฉํ•˜๋ฉด ํ•จ์ˆ˜ ์„ ์–ธ๋ฌธ์œผ๋กœ ํ•ด์„๋œ๋‹ค.
    // ํ•จ์ˆ˜ ์„ ์–ธ๋ฌธ์—์„œ๋Š” ํ•จ์ˆ˜ ์ด๋ฆ„์„ ์ƒ๋žตํ•  ์ˆ˜ ์—†๋‹ค.
    function foo() { console.log('foo'); }
    foo(); // foo
      
    // ํ•จ์ˆ˜ ๋ฆฌํ„ฐ๋Ÿด์„ ํ”ผ์—ฐ์‚ฐ์ž๋กœ ์‚ฌ์šฉํ•˜๋ฉด ํ•จ์ˆ˜ ์„ ์–ธ๋ฌธ์ด ์•„๋‹ˆ๋ผ ํ•จ์ˆ˜ ๋ฆฌํ„ฐ๋Ÿด ํ‘œํ˜„์‹์œผ๋กœ ํ•ด์„๋œ๋‹ค.
    // ํ•จ์ˆ˜ ๋ฆฌํ„ฐ๋Ÿด์—์„œ๋Š” ํ•จ์ˆ˜ ์ด๋ฆ„์„ ์ƒ๋žตํ•  ์ˆ˜ ์žˆ๋‹ค.
    (function bar() { console.log('bar'); });
    bar(); // ReferenceError: bar is not defined
    
  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์€ ์ƒ์„ฑ๋œ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๊ธฐ ์œ„ํ•ด ํ•จ์ˆ˜ ์ด๋ฆ„๊ณผ ๋™์ผํ•œ ์ด๋ฆ„์˜ ์‹๋ณ„์ž๋ฅผ ์•”๋ฌต์ ์œผ๋กœ ์ƒ์„ฑํ•˜๊ณ , ๊ฑฐ๊ธฐ์— ํ•จ์ˆ˜ ๊ฐ์ฒด๋ฅผ ํ• ๋‹น

    • ํ•จ์ˆ˜๋Š” ํ•จ์ˆ˜ ์ด๋ฆ„์œผ๋กœ ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ํ•จ์ˆ˜ ๊ฐ์ฒด๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ์‹๋ณ„์ž๋กœ ํ˜ธ์ถœ

ํ•จ์ˆ˜ ํ‘œํ˜„์‹

  • ํ•จ์ˆ˜๋Š” ์ผ๊ธ‰ ๊ฐ์ฒด

    • JS์—”์ง„์—์„œ ํ•จ์ˆ˜๋Š” ๊ฐ’์ฒ˜๋Ÿผ ๋ณ€์ˆ˜์— ํ• ๋‹น ํ•  ์ˆ˜ ์žˆ๊ณ  ํ”„๋กœํผํ‹ฐ ๊ฐ’์ด ๋  ์ˆ˜ ์žˆ์œผ๋ฉฐ ๋ฐฐ์—ด์˜ ์š”์†Œ๊ฐ€ ๋  ์ˆ˜ ์žˆ์Œ
  • 1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    
    // ํ•จ์ˆ˜ ํ‘œํ˜„์‹
    var add = function (x, y) {
      return x + y;
    };
      
    console.log(add(2, 5)); // 7
      
    // ๊ธฐ๋ช… ํ•จ์ˆ˜ ํ‘œํ˜„์‹
    var add = function foo (x, y) {
      return x + y;
    };
      
    // ํ•จ์ˆ˜ ๊ฐ์ฒด๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ์‹๋ณ„์ž๋กœ ํ˜ธ์ถœ
    console.log(add(2, 5)); // 7
      
    // ํ•จ์ˆ˜ ์ด๋ฆ„์œผ๋กœ ํ˜ธ์ถœํ•˜๋ฉด ReferenceError๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.
    // ํ•จ์ˆ˜ ์ด๋ฆ„์€ ํ•จ์ˆ˜ ๋ชธ์ฒด ๋‚ด๋ถ€์—์„œ๋งŒ ์œ ํšจํ•œ ์‹๋ณ„์ž๋‹ค.
    console.log(foo(2, 5)); // ReferenceError: foo is not defined
    

ํ•จ์ˆ˜ ์ƒ์„ฑ ์‹œ์ ๊ณผ ํ˜ธ์ด์ŠคํŒ…

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// ํ•จ์ˆ˜ ์ฐธ์กฐ
console.dir(add); // ฦ’ add(x, y)
console.dir(sub); // undefined

// ํ•จ์ˆ˜ ํ˜ธ์ถœ
console.log(add(2, 5)); // 7
console.log(sub(2, 5)); // TypeError: sub is not a function

// ํ•จ์ˆ˜ ์„ ์–ธ๋ฌธ
function add(x, y) {
  return x + y;
}

// ํ•จ์ˆ˜ ํ‘œํ˜„์‹
var sub = function (x, y) {
  return x - y;
};
  • ํ•จ์ˆ˜ ์„ ์–ธ๋ฌธ์œผ๋กœ ์ •์˜ํ•œ ํ•จ์ˆ˜์™€ ํ•จ์ˆ˜ ํ‘œํ˜„์‹์œผ๋กœ ์˜ํ•œ ์ƒ์„ฑ ์‹œ์ ์ด ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์—, ํ•จ์ˆ˜ ์„ ์–ธ๋ฌธ์œผ๋กœ ์ •์˜ํ•œ ํ•จ์ˆ˜๋Š” ํ•จ์ˆ˜ ์„ ์–ธ๋ฌธ ์ด์ „์— ํ˜ธ์ถœ์ด ๊ฐ€๋Šฅํ•˜๋ฉฐ ํ•จ์ˆ˜ํ‘œํ˜„์‹์œผ๋กœ ์ •์˜ํ•œ ํ•จ์ˆ˜๋Š” ํ•จ์ˆ˜ ํ‘œํ˜„์‹ ์ด์ „์— ํ˜ธ์ถœ ํ•  ์ˆ˜ ์—†๋‹ค

  • ํ•จ์ˆ˜ ์„ ์–ธ๋ฌธ์€ ๋Ÿฐํƒ€์ž„ ์ด์ „์— ์‹คํ–‰

  • ํ•จ์ˆ˜ ํ˜ธ์ด์ŠคํŒ…

    • ํ•จ์ˆ˜ ์„ ์–ธ๋ฌธ์ด ์ฝ”๋“œ์˜ ์„ ๋‘๋กœ ๋Œ์–ด ์˜ฌ๋ ค์ง„ ๊ฒƒ์ฒ˜๋Ÿผ ๋™์ž‘ํ•˜๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๊ณ ์œ ์˜ ํŠน์ง•
    ํ•จ์ˆ˜ ํ˜ธ์ด์ŠคํŒ… vs ๋ณ€์ˆ˜ ํ˜ธ์ด์ŠคํŒ…

    ๊ณตํ†ต์ : ๋Ÿฐํƒ€์ž„ ์ด์ „์— ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์— ์˜ํ•ด ๋จผ์ € ์‹คํ–‰๋˜์–ด ์‹๋ณ„์ž๋ฅผ ์ƒ์„ฑํ•จ

    ์ฐจ์ด์ : var ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•œ ๋ณ€์ˆ˜ ์„ ์–ธ๋ฌธ ์ด์ „์— ๋ณ€์ˆ˜๋ฅผ ์ฐธ์กฐํ•˜๋ฉด undefined๋กœ ํ‰๊ฐ€, ํ•จ์ˆ˜ ์„ ์–ธ๋ฌธ ์ด์ „์— ํ˜ธ์ถœํ•ด๋„ ํ˜ธ์ถœ์ด ๊ฐ€๋Šฅ

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

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

    • ๋”๊ธ€๋ผ์Šค ํฌ๋ฝํฌ๋“œ: JSON์„ ์ฐฝ์•ˆ, โ€œ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ: The Good Partsโ€ ์ถœ๊ฐ„

Function ์ƒ์„ฑ์ž ํ•จ์ˆ˜

1
2
3
var add = new Function('x', 'y', 'return x + y');

console.log(add(2, 5)); // 7
  • ์ผ๋ฐ˜์ ์ด์ง€ ์•Š์€ ๋ฐฉ์‹
  • ํด๋กœ์ €๋ฅผ ์ƒ์„ฑํ•˜์ง€ ์•Š๊ณ  ํ•จ์ˆ˜ ์„ ์–ธ๋ฌธ์ด๋‚˜ ํ•จ์ˆ˜ํ‘œํ˜„์‹์œผ๋กœ ์ƒ์„ฑํ•œ ํ•จ์ˆ˜์™€ ๋‹ค๋ฅด๊ฒŒ ๋™์ž‘

ํ™”์‚ดํ‘œ ํ•จ์ˆ˜

  • ES6์—์„œ ๋„์ž„๋จ
  • =>
  • ํ•ญ์ƒ ์ต๋ช…ํ•จ์ˆ˜๋กœ ์ •์˜
  • ํ•จ์ˆ˜ ์„ ์–ธ๋ฌธ ๋˜๋Š” ํ•จ์ˆ˜ ํ‘œํ˜„์‹์„ ์™„์ „ํžˆ ๋Œ€์ฒด ๋ถˆ๊ฐ€๋Šฅ. ํ‘œํ˜„๊ณผ ๋‚ด๋ถ€ ๋™์ž‘์ด ๊ฐ„๋žตํ™”
  • ์ƒ์„ฑ์ž ํ•จ์ˆ˜ ์‚ฌ์šฉ ๋ถˆ๊ฐ€, ๊ธฐ์กด ํ•จ์ˆ˜์™€ this ๋ฐ”์ธ๋”ฉ ๋ฐฉ์‹์ด ๋‹ค๋ฆ„, prototype ํ”„๋กœํผํ‹ฐ ์—†์Œ, arguments ๊ฐ์ฒด ์ƒ์„ฑํ•˜์ง€ ์•Š์Œ
1
2
3
// ํ™”์‚ดํ‘œ ํ•จ์ˆ˜
const add = (x, y) => x + y;
console.log(add(2, 5)); // 7

ํ•จ์ˆ˜ ํ˜ธ์ถœ

๋งค๊ฐœ๋ณ€์ˆ˜์™€ ์ธ์ˆ˜

  • ์ธ์ˆ˜๋Š” ๊ฐ’์œผ๋กœ ํ‰๊ฐ€๋  ์ˆ˜ ์žˆ๋Š” ํ‘œํ˜„์‹์ด์–ด์•ผํ•จ
  • ์ธ์ˆ˜๋Š” ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ• ๋•Œ ์ง€์ •, ๊ฐœ์ˆ˜์™€ ํƒ€์ž…์— ์ œํ•œ์ด ์—†์Œ
1
2
3
4
5
6
7
8
// ํ•จ์ˆ˜ ์„ ์–ธ๋ฌธ
function add(x, y) {
  return x + y;
}

// ํ•จ์ˆ˜ ํ˜ธ์ถœ
// ์ธ์ˆ˜ 1๊ณผ 2๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜ x์™€ y์— ์ˆœ์„œ๋Œ€๋กœ ํ• ๋‹น๋˜๊ณ  ํ•จ์ˆ˜ ๋ชธ์ฒด์˜ ๋ฌธ๋“ค์ด ์‹คํ–‰๋œ๋‹ค.
var result = add(1, 2);
  • ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ• ๋•Œ ์„ ์–ธ, ํ•จ์ˆ˜ ๋ชธ์ฒด ๋‚ด๋ถ€์—์„œ ๋ณ€์ˆ˜์™€ ๋™์ผํ•˜๊ฒŒ ์ทจ๊ธ‰
  • ํ•จ์ˆ˜ ๋ชธ์ฒด ๋‚ด๋ถ€์—์„œ๋งŒ ์ฐธ์กฐ ๊ฐ€๋Šฅ(์Šค์ฝ”ํ”„๋Š” ํ•จ์ˆ˜ ๋‚ด๋ถ€)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function add(x, y) {
  console.log(x, y); // 2 5
  return x + y;
}

add(2, 5);

// add ํ•จ์ˆ˜์˜ ๋งค๊ฐœ๋ณ€์ˆ˜ x, y๋Š” ํ•จ์ˆ˜ ๋ชธ์ฒด ๋‚ด๋ถ€์—์„œ๋งŒ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ๋‹ค.
console.log(x, y); // ReferenceError: x is not defined

function add(x, y) {
  return x + y;	// 2 + undefined ์˜ ๊ฒฐ๊ณผ ๊ฐ’ : Not a Number
}

console.log(add(2)); // NaN
  • ์ธ์ˆ˜๊ฐ€ ๋ถ€์กฑํ•˜์—ฌ ์ธ์ˆ˜๊ฐ€ ํ• ๋‹น๋˜์ง€ ์•Š์€ ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ๊ฐ’์€ undefined

  • ๋งค๊ฐœ๋ณ€์ˆ˜๋ณด๋‹ค ์ธ์ˆ˜๊ฐ€ ๋” ๋งŽ์€ ๊ฒฝ์šฐ ์ดˆ๊ณผ๋œ ์ธ์ˆ˜๋Š” ๋ฌด์‹œ๋จ

    • ๋ชจ๋“  ์ธ์ˆ˜๋Š” arguments ๊ฐ์ฒด์˜ ํ”„๋กœํผํ‹ฐ๋กœ ๋ณด๊ด€๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ดˆ๊ณผ๋œ ์ธ์ˆ˜๊ฐ€ ๋ฒ„๋ ค์ง€๋Š” ๊ฒƒ์€ ์•„๋‹˜

    • 1
      2
      3
      4
      5
      6
      7
      8
      
      function add(x, y) {
        console.log(arguments);
        // Arguments(3) [2, 5, 10, callee: ฦ’, Symbol(Symbol.iterator): ฦ’]
          
        return x + y;
      }
          
      add(2, 5, 10);
      

์ธ์ˆ˜ ํ™•์ธ

  1. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํ•จ์ˆ˜๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜์™€ ์ธ์ˆ˜์˜ ๊ฐœ์ˆ˜๊ฐ€ ์ผ์น˜ํ•˜๋Š”์ง€ ํ™•์ธํ•˜์ง€ ์•Š์Œ

  2. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ๋™์  ํƒ€์ž… ์–ธ์–ด์ด๊ธฐ ๋•Œ๋ฌธ์— ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํ•จ์ˆ˜๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ํƒ€์ž…์„ ์‚ฌ์ „์— ์ง€์ •ํ•  ์ˆ˜ ์—†์Œ

  • ๋•Œ๋ฌธ์— ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๊ฒฝ์šฐ ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•  ๋•Œ ์ ์ ˆํ•œ ์ธ์ˆ˜๊ฐ€ ์ „๋‹ฌ๋˜๋Š”์ง€ ํ™•์ธํ•  ํ•„์š”๊ฐ€ ์žˆ์Œ
1
2
3
4
5
6
7
8
9
10
11
function add(x, y) {
  if (typeof x !== 'number' || typeof y !== 'number') {
    // ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ํ†ตํ•ด ์ „๋‹ฌ๋œ ์ธ์ˆ˜์˜ ํƒ€์ž…์ด ๋ถ€์ ์ ˆํ•œ ๊ฒฝ์šฐ ์—๋Ÿฌ๋ฅผ ๋ฐœ์ƒ์‹œํ‚จ๋‹ค.
    throw new TypeError('์ธ์ˆ˜๋Š” ๋ชจ๋‘ ์ˆซ์ž ๊ฐ’์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.');
  }

  return x + y;
}

console.log(add(2));        // TypeError: ์ธ์ˆ˜๋Š” ๋ชจ๋‘ ์ˆซ์ž ๊ฐ’์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
console.log(add('a', 'b')); // TypeError: ์ธ์ˆ˜๋Š” ๋ชจ๋‘ ์ˆซ์ž ๊ฐ’์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ๊ทน๋ณตํ•˜๊ธฐ ์œ„ํ•ด ์ •์ ํƒ€์ž…์„ ์‚ฌ์šฉํ•˜๋Š” ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•๋„ ์žˆ์Œ

1
2
3
4
5
6
7
8
9
10
11
12
// ๋‹จ์ถ•ํ‰๊ฐ€๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋งค๊ฐœ๋ณ€์ˆ˜์— ๊ธฐ๋ณธ๊ฐ‘์„ ํ• ๋‹นํ•˜๊ธฐ
function add(a, b, c) {
  a = a || 0;
  b = b || 0;
  c = c || 0;
  return a + b + c;
}

console.log(add(1, 2, 3)); // 6
console.log(add(1, 2)); // 3
console.log(add(1)); // 1
console.log(add()); // 0
  • ๋งค๊ฐœ๋ณ€์ˆ˜ ๊ธฐ๋ณธ๊ฐ’์„ ์‚ฌ์šฉํ•˜๋ฉด ํ•จ์ˆ˜ ๋‚ด์—์„œ ์ˆ˜ํ–‰ํ•˜๋˜ ์ธ์ˆ˜ ์ฒดํฌ ๋ฐ ์ดˆ๊ธฐํ™”๋ฅผ ๊ฐ„์†Œํ™” ๊ฐ€๋Šฅํ•จ

    • ๋งค๊ฐœ๋ณ€์ˆ˜ ๊ธฐ๋ณธ๊ฐ’์€ ๋งค๊ฐœ๋ณ€์ˆ˜์— ์ธ์ˆ˜๋ฅผ ์ „๋‹ฌํ•˜์ง€ ์•Š์•˜์„ ๊ฒฝ์šฐ์™€ undefined๋ฅผ ์ „๋‹ฌํ•œ ๊ฒฝ์šฐ์—๋งŒ ์œ ํšจ

    • 1
      2
      3
      4
      5
      6
      7
      8
      
      function add(a = 0, b = 0, c = 0) {
        return a + b + c;
      }
          
      console.log(add(1, 2, 3)); // 6
      console.log(add(1, 2)); // 3
      console.log(add(1)); // 1
      console.log(add()); // 0
      

๋งค๊ฐœ๋ณ€์ˆ˜์˜ ์ตœ๋Œ€ ๊ฐœ์ˆ˜

  • ๋งค๊ฐœ ๋ณ€์ˆ˜์˜ ์ตœ๋Œ€ ๊ฐœ์ˆ˜๋Š” ๋ช…์‹œ์ ์œผ๋กœ ์ œํ•œํ•˜๊ณ  ์žˆ์ง€ ์•Š์œผ๋ฉฐ, ์ˆœ์„œ์— ์˜๋ฏธ๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ธ์ˆ˜์˜ ์ˆœ์„œ๋ฅผ ๊ณ ๋ คํ•ด์•ผํ•จ

  • ์ด์ƒ์ ์ธ ํ•จ์ˆ˜๋Š” ํ•œ ๊ฐ€์ง€ ์ผ๋งŒ ํ•ด์•ผํ•˜๋ฉฐ ๊ฐ€๊ธ‰์  ์ž‘๊ฒŒ ๋งŒ๋“ค์–ด์•ผ ํ•จ

    • ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ์ตœ๋Œ€ 3๊ฐœ ์ด์ƒ ๋„˜์ง€ ์•Š๋Š” ๊ฒƒ์„ ๊ถŒ์žฅ

    • ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ 3๊ฐœ ์ด์ƒ์ผ ๊ฒฝ์šฐ, ํ•˜๋‚˜์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•˜๊ณ  ๊ฐ์ฒด๋ฅผ ์ธ์ˆ˜๋กœ ์ „๋‹ฌํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์œ ๋ฆฌ

    • 1
      2
      3
      4
      5
      6
      7
      
      // jQuery์˜ aJax๋ฉ”์„œ๋“œ์— ๊ฐ์ฒด๋ฅผ ์ธ์ˆ˜๋กœ ์ „๋‹ฌํ•˜๋Š” ์˜ˆ
      $.ajax({
        method: 'POST',
        url: '/user',
        data: { id: 1, name: 'Lee' },
        cache: false
      });
      
    • ๊ฐ์ฒด๋ฅผ ์ธ์ˆ˜๋กœ ์‚ฌ์šฉํ•˜๋ฉด ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ์ด ์ข‹์•„์ง€๊ณ  ์‹ค์ˆ˜๋„ ์ค„์–ด๋“ฆ

      • ํ•จ์ˆ˜ ์™ธ๋ถ€์—์„œ ํ•จ์ˆ˜ ๋‚ด๋ถ€๋กœ ์ „๋‹ฌํ•œ ๊ฐ์ฒด๋ฅผ ํ•จ์ˆ˜ ๋‚ด๋ถ€์—์„œ ๋ณ€๊ฒฝํ•˜๋ฉด ํ•จ์ˆ˜ ์™ธ๋ถ€์˜ ๊ฐ์ฒด๊ฐ€ ๋ณ€๊ฒฝ๋˜๋Š” ๋ถ€์ˆ˜ํšจ๊ณผ๊ฐ€ ๋ฐœ์ƒํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ฃผ์˜๋ฅผ ์š”ํ•จ

๋ฐ˜ํ™˜๋ฌธ

  • ํ•จ์ˆ˜ ํ˜ธ์ถœ์€ ํ‘œํ˜„์‹

  • ๋ฐ˜ํ™˜๋ฌธ์€ ๋‘ ๊ฐ€์ง€ ์—ญํ• ์„ ํ•จ

    • ๋ฐ˜ํ™˜๋ฌธ์€ ํ•จ์ˆ˜์˜ ์‹คํ–‰์„ ์ค‘๋‹จํ•˜๊ณ  ํ•จ์ˆ˜ ๋ชธ์ฒด๋ฅผ ๋น ์ ธ๋‚˜๊ฐ
    • return ํ‚ค์›Œ๋“œ ๋’ค์— ์˜ค๋Š” ํ‘œํ˜„์‹์„ ํ‰๊ฐ€ํ•ด ๋ฐ˜ํ™˜
      • ํ‘œํ˜„์‹์„ ๋ช…์‹œ์ ์œผ๋กœ ์ง€์ •ํ•˜์ง€ ์•Š์œผ๋ฉด undefined๊ฐ€ ๋ฐ˜ํ™˜
  • return ๋’ค์— ์„ธ๋ฏธ์ฝœ๋ก (;) ์ƒ๋žต ๊ฐ€๋Šฅ

  • 1
    2
    3
    4
    5
    6
    7
    
    function multiply(x, y) {
      // return ํ‚ค์›Œ๋“œ์™€ ๋ฐ˜ํ™˜๊ฐ’ ์‚ฌ์ด์— ์ค„๋ฐ”๊ฟˆ์ด ์žˆ์œผ๋ฉด
      return // ์„ธ๋ฏธ์ฝœ๋ก  ์ž๋™ ์‚ฝ์ž… ๊ธฐ๋Šฅ(ASI)์— ์˜ํ•ด ์„ธ๋ฏธ์ฝœ๋ก ์ด ์ถ”๊ฐ€๋œ๋‹ค.
      x * y; // ๋ฌด์‹œ๋œ๋‹ค.
    }
      
    console.log(multiply(3, 5)); // undefined
    
  • 1
    2
    3
    4
    5
    6
    7
    8
    9
    
    <!-- ์ „์—ญ์—์„œ ๋ฐ˜ํ™˜๋ฌธ์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ฌธ๋ฒ•์—๋Ÿฌ ๋ฐœ์ƒ -->
    <!DOCTYPE html>
    <html>
    <body>
      <script>
        return; // SyntaxError: Illegal return statement
      </script>
    </body>
    </html>
    

์ฐธ์กฐ์— ์˜ํ•œ ์ „๋‹ฌ๊ณผ ์™ธ๋ถ€ ์ƒํƒœ์˜ ๋ณ€๊ฒฝ

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
// ๋งค๊ฐœ๋ณ€์ˆ˜ primitive๋Š” ์›์‹œ ๊ฐ’์„ ์ „๋‹ฌ๋ฐ›๊ณ , ๋งค๊ฐœ๋ณ€์ˆ˜ obj๋Š” ๊ฐ์ฒด๋ฅผ ์ „๋‹ฌ๋ฐ›๋Š”๋‹ค.
function changeVal(primitive, obj) {
  primitive += 100;
  obj.name = 'Kim';
}

// ์™ธ๋ถ€ ์ƒํƒœ
var num = 100;
var person = { name: 'Lee' };

console.log(num); // 100
console.log(person); // {name: "Lee"}

// ์›์‹œ ๊ฐ’์€ ๊ฐ’ ์ž์ฒด๊ฐ€ ๋ณต์‚ฌ๋˜์–ด ์ „๋‹ฌ๋˜๊ณ  ๊ฐ์ฒด๋Š” ์ฐธ์กฐ ๊ฐ’์ด ๋ณต์‚ฌ๋˜์–ด ์ „๋‹ฌ๋œ๋‹ค.
changeVal(num, person);

// ์›์‹œ ๊ฐ’์€ ์›๋ณธ์ด ํ›ผ์†๋˜์ง€ ์•Š๋Š”๋‹ค.
console.log(num); // 100

// ๊ฐ์ฒด๋Š” ์›๋ณธ์ด ํ›ผ์†๋œ๋‹ค.
console.log(person); // {name: "Kim"}
  • ๊ฐ์ฒด์˜ ๋ณ€๊ฒฝ์„ ์ถ”์ ํ•˜๋ ค๋ฉด Observer ํŒจํ„ด ๋“ฑ์„ ํ†ตํ•ด ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐ๋ฅผ ๊ณต์œ ํ•˜๋Š” ๋ชจ๋“  ์ด๋“ค์—๊ฒŒ ๋ณ€๊ฒฝ์‚ฌ์‹ค์„ ํ†ต์ง€ํ•˜๊ณ  ์ด์— ๋Œ€์ฒ˜ํ•˜๋Š” ์ถ”๊ฐ€ ๋Œ€์‘์ด ํ•„์š”
  • ์œ„์— ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐ๋ฐฉ๋ฒ• ์ค‘ ํ•˜๋‚˜๋Š” ๊ฐ์ฒด๋ฅผ ๋ถˆ๋ณ€๊ฐ์ฒด(immutable object)๋กœ ๋งŒ๋“ค์–ด ์‚ฌ์šฉ
    • ๊ฐ์ฒด์˜ ๋ณต์‚ฌ๋ณธ์„ ์ƒˆ๋กญ๊ฒŒ ์ƒ์„ฑํ•˜๋Š” ๋น„์šฉ์€ ๋“ค์ง€๋งŒ ๊ฐ์ฒด๋ฅผ ๋งˆ์น˜ ์›์‹œ ๊ฐ’์ฒ˜๋Ÿผ ๋ณ€๊ฒฝ ๋ถˆ๊ฐ€๋Šฅํ•œ ๊ฐ’์œผ๋กœ ๋งŒ๋“ค์–ด ๋™์ž‘ํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ๊ฒƒ
    • ๊นŠ์€ ๋ณต์‚ฌ(Deep copy)๋ฅผ ํ†ตํ•ด ์ƒˆ๋กœ์šด ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์žฌํ• ๋‹น์„ ํ•˜์—ฌ ๊ต์ฒด
  • ์™ธ๋ถ€ ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๊ณ  ์™ธ๋ถ€ ์ƒํƒœ์— ์˜์กดํ•˜์ง€ ์•Š๋Š” ํ•จ์ˆ˜๋ฅผ ์ˆœ์ˆ˜ํ•จ์ˆ˜๋ผ๊ณ  ํ•จ
    • ๋ถ€์ˆ˜ํšจ๊ณผ ์ตœ๋Œ€ํ•œ ์–ต์ œํ•˜์—ฌ ์˜ค๋ฅ˜๋ฅผ ํ”ผํ•˜๊ณ  ํ”„๋กœ๊ทธ๋žจ์˜ ์•ˆ์ „์„ฑ์„ ๋†’์ด๋ ค๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํŒจ๋Ÿฌ๋‹ค์ž„์„ ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด๋ผ๊ณ  ํ•จ

๋‹ค์–‘ํ•œ ํ•จ์ˆ˜์˜ ํ˜•ํƒœ

์ฆ‰์‹œ ์‹คํ–‰ ํ•จ์ˆ˜

  • ํ•จ์ˆ˜ ์ •์˜์™€ ๋™์‹œ์— ์ฆ‰์‹œ ํ˜ธ์ถœ๋˜๋Š” ํ•จ์ˆ˜

  • ๋‹จ ํ•œ๋ฒˆ๋งŒ ํ˜ธ์ถœ๋˜๋ฉฐ ๋‹ค์‹œ ํ˜ธ์ถœํ•  ์ˆ˜ ์—†์Œ

  • ํ•จ์ˆ˜ ์ด๋ฆ„์ด ์—†๋Š” ์ต๋ช… ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ผ๋ฐ˜์ 

  • ๊ธฐ๋ช… ํ•จ์ˆ˜๋กœ ์‚ฌ์šฉํ•ด๋„ ํ•จ์ˆ˜ ๋ฆฌํ„ฐ๋Ÿด๋กœ ํ‰๊ฐ€๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค์‹œ ํ˜ธ์ถœ์€ ๋ถˆ๊ฐ€๋Šฅ

  • ๋ฐ˜๋“œ์‹œ ๊ทธ๋ฃน์—ฐ์‚ฐ์ž(โ€ฆ)๋กœ ๊ฐ์‹ธ์•ผํ•จ

  • 1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    
    // ์ต๋ช… ์ฆ‰์‹œ ์‹คํ–‰ ํ•จ์ˆ˜
    (function () {
      var a = 3;
      var b = 5;
      return a * b;
    }());
      
    // ๊ธฐ๋ช… ์ฆ‰์‹œ ์‹คํ–‰ ํ•จ์ˆ˜
    (function foo() {
      var a = 3;
      var b = 5;
      return a * b;
    }());
      
    foo(); // ReferenceError: foo is not defined
    
  • 1
    2
    3
    4
    5
    6
    7
    8
    9
    
    function () { // SyntaxError: Function statements require a function name
      // ...
    }();
      
    function foo() {
      // ...
    }(); // SyntaxError: Unexpected token ')'
      
    function foo() {}(); // => function foo() {};();
    
  • ๊ทธ๋ฃน ์—ฐ์‚ฐ์ž๋กœ ํ•จ์ˆ˜๋ฅผ ๋ฌถ๋Š” ์ด์œ 

    • ๋จผ์ € ํ•จ์ˆ˜ ๋ฆฌํ„ฐ๋Ÿด์„ ํ‰๊ฐ€ํ•ด์„œ ํ•จ์ˆ˜ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด์„œ

      • ๋จผ์ € ํ•จ์ˆ˜ ๋ฆฌํ„ฐ๋Ÿด์„ ํ‰๊ฐ€ํ•ด์„œ ํ•จ์ˆ˜ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ๊ทธ๋ฃน์—ฐ์‚ฐ์ž ์ด์™ธ์˜ ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•ด๋„ ์ข‹์Œ
    • 1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      
      // ์ฒซ๋ฒˆ์งธ ๋ฐฉ์‹์ด ์ œ์ผ ์ผ๋ฐ˜์ ์ธ ๋ฐฉ์‹
      (function () {
        // ...
      }());
          
      (function () {
        // ...
      })();
          
      !function () {
        // ...
      }();
          
      +function () {
        // ...
      }();
      
  • ์ฆ‰์‹œ ์‹คํ–‰ ํ•จ์ˆ˜ ๋‚ด์— ์ฝ”๋“œ๋ฅผ ๋ชจ์•„ ๋‘๋ฉด ๋ณ€์ˆ˜๋‚˜ ํ•จ์ˆ˜ ์ด๋ฆ„์˜ ์ถฉ๋Œ์„ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ์Œ

์žฌ๊ท€ ํ•จ์ˆ˜

  • ์žฌ๊ท€ํ˜ธ์ถœ(recursive call): ํ•จ์ˆ˜๊ฐ€ ์ž๊ธฐ ์ž์‹ ์„ ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ

  • ์žฌ๊ท€ํ•จ์ˆ˜(recursive function): ์žฌ๊ท€ํ˜ธ์ถœ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ํ•จ์ˆ˜

    • ๋ฐ˜๋ณต๋˜๋Š” ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•ด ์‚ฌ์šฉ

    • 1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      
      // ๋ฐ˜๋ณต๋ฌธ์„ ์ด์šฉํ•œ ๋ฐ˜๋ณต์ฒ˜๋ฆฌ
      function countdown(n) {
        for (var i = n; i >= 0; i--) console.log(i);
      }
          
      countdown(10);
          
      // ์žฌ๊ท€ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•œ ๋ฐ˜๋ณต์ฒ˜๋ฆฌ
      function countdown(n) {
        if (n < 0) return;
        console.log(n);
        countdown(n - 1); // ์žฌ๊ท€ ํ˜ธ์ถœ
      }
          
      countdown(10);
      
    • 1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      
      // ํŒฉํ† ๋ฆฌ์–ผ์„ ์žฌ๊ท€ํ•จ์ˆ˜๋กœ ๊ตฌํ˜„
      // ํŒฉํ† ๋ฆฌ์–ผ(๊ณ„์Šน)์€ 1๋ถ€ํ„ฐ ์ž์‹ ๊นŒ์ง€์˜ ๋ชจ๋“  ์–‘์˜ ์ •์ˆ˜์˜ ๊ณฑ์ด๋‹ค.
      // n! = 1 * 2 * ... * (n-1) * n
      function factorial(n) {
        // ํƒˆ์ถœ ์กฐ๊ฑด: n์ด 1 ์ดํ•˜์ผ ๋•Œ ์žฌ๊ท€ ํ˜ธ์ถœ์„ ๋ฉˆ์ถ˜๋‹ค.
        if (n <= 1) return 1;
        // ์žฌ๊ท€ ํ˜ธ์ถœ
        return n * factorial(n - 1);
      }
          
      console.log(factorial(0)); // 0! = 1
      console.log(factorial(1)); // 1! = 1
      console.log(factorial(2)); // 2! = 2 * 1 = 2
      console.log(factorial(3)); // 3! = 3 * 2 * 1 = 6
      console.log(factorial(4)); // 4! = 4 * 3 * 2 * 1 = 24
      console.log(factorial(5)); // 5! = 5 * 4 * 3 * 2 * 1 = 120
      
  • ํ•จ์ˆ˜ ์™ธ๋ถ€์—์„œ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ๋Š” ๋ฐ˜๋“œ์‹œ ํ•จ์ˆ˜๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ์‹๋ณ„์ž๋กœ ํ•ด์•ผํ•จ

  • ์žฌ๊ท€ ํ•จ์ˆ˜๋Š” ์ž์‹ ์„ ๋ฌดํ•œ ์žฌ๊ท€ ํ˜ธ์ถœํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํƒˆ์ถœ ์กฐ๊ฑด์„ ๋ฐ˜๋“œ์‹œ ๋งŒ๋“ค์–ด ๋ฉˆ์ถœ ์ˆ˜ ์žˆ์–ด์•ผํ•จ

    • ํƒˆ์ถœ ์กฐ๊ฑด์ด ์—†์œผ๋ฉด ํ•จ์ˆ˜๊ฐ€ ๋ฌดํ•œ ํ˜ธ์ถœ๋˜์–ด ์Šคํƒ ์˜ค๋ฒ„ํ”Œ๋กœ(Stack overflow) ์—๋Ÿฌ ๋ฐœ์ƒ
  • ์žฌ๊ท€ ํ•จ์ˆ˜๋Š” for๋ฌธ์ด๋‚˜ while๋ฌธ์œผ๋กœ๋„ ๊ตฌํ˜„์ด ๊ฐ€๋Šฅ

    • 1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      28
      29
      
      // ์žฌ๊ท€ ํ•จ์ˆ˜์˜ ํ•จ์ˆ˜ ํ‘œํ˜„์‹
      var factorial = function foo(n) {
        // ํƒˆ์ถœ ์กฐ๊ฑด: n์ด 1 ์ดํ•˜์ผ ๋•Œ ์žฌ๊ท€ ํ˜ธ์ถœ์„ ๋ฉˆ์ถ˜๋‹ค.
        if (n <= 1) return 1;
        // ํ•จ์ˆ˜๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ์‹๋ณ„์ž๋กœ ์ž๊ธฐ ์ž์‹ ์„ ์žฌ๊ท€ ํ˜ธ์ถœ
        return n * factorial(n - 1);
          
        // ํ•จ์ˆ˜ ์ด๋ฆ„์œผ๋กœ ์ž๊ธฐ ์ž์‹ ์„ ์žฌ๊ท€ ํ˜ธ์ถœํ•  ์ˆ˜๋„ ์žˆ๋‹ค.
        // console.log(factorial === foo); // true
        // return n * foo(n - 1);
      };
          
      console.log(factorial(5)); // 5! = 5 * 4 * 3 * 2 * 1 = 120
          
      // ์žฌ๊ท€ ํ•จ์ˆ˜๋ฅผ while๋ฌธ์„ ์ด์šฉํ•˜์—ฌ ๋งŒ๋“  ์ฝ”๋“œ
      function factorial(n) {
        if (n <= 1) return 1;
          
        var res = n;
        while (--n) res *= n;
        return res;
      }
          
      console.log(factorial(0)); // 0! = 1
      console.log(factorial(1)); // 1! = 1
      console.log(factorial(2)); // 2! = 2 * 1 = 2
      console.log(factorial(3)); // 3! = 3 * 2 * 1 = 6
      console.log(factorial(4)); // 4! = 4 * 3 * 2 * 1 = 24
      console.log(factorial(5)); // 5! = 5 * 4 * 3 * 2 * 1 = 120
      
  • ์žฌ๊ท€ ํ•จ์ˆ˜๋Š” ๋ฐ˜๋ณต๋ฌธ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ ๋ณด๋‹ค ์žฌ๊ท€ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํŽธ์ด ๋” ์ง๊ด€์ ์œผ๋กœ ์ดํ•ดํ•˜๊ธฐ ์‰ฌ์šธ ๋•Œ๋งŒ ํ•œ์ •์ ์œผ๋กœ ์‚ฌ์šฉํ•ด์•ผ ํ•จ

์ค‘์ฒฉ ํ•จ์ˆ˜

  • ์ค‘์ฒฉํ•จ์ˆ˜(or๋‚ด๋ถ€ํ•จ์ˆ˜): ํ•จ์ˆ˜ ๋‚ด๋ถ€์— ์ •์˜๋œ ํ•จ์ˆ˜

  • ์™ธ๋ถ€ํ•จ์ˆ˜: ์ค‘์ฒฉ ํ•จ์ˆ˜๋ฅผ ํฌํ•จํ•˜๋Š” ํ•จ์ˆ˜

  • ์ค‘์ฒฉํ•จ์ˆ˜๋Š” ์™ธ๋ถ€ ํ•จ์ˆ˜ ๋‚ด๋ถ€์—์„œ๋งŒ ํ˜ธ์ถœ ๊ฐ€๋Šฅ

  • ์ค‘์ฒฉํ•จ์ˆ˜๋Š” ์ž์‹ ์„ ํฌํ•จํ•˜๋Š” ์™ธ๋ถ€ํ•จ์ˆ˜๋ฅผ ๋•๋Š” ํ—ฌํผํ•จ์ˆ˜์˜ ์—ญํ• ์„ ํ•จ

  • 1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    
    function outer() {
      var x = 1;
      
      // ์ค‘์ฒฉ ํ•จ์ˆ˜
      function inner() {
        var y = 2;
        // ์™ธ๋ถ€ ํ•จ์ˆ˜์˜ ๋ณ€์ˆ˜๋ฅผ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ๋‹ค.
        console.log(x + y); // 3
      }
      
      inner();
    }
      
    outer();
    

์ฝœ๋ฐฑ ํ•จ์ˆ˜

  • ๋ฐ˜๋ณตํ•˜๋Š” ์ผ์€ ๋ณ€ํ•˜์ง€ ์•Š๊ณ  ๊ณตํ†ต์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•˜์ง€๋งŒ ๋ฐ˜๋ณตํ•˜๋ฉด์„œ ํ•˜๋Š” ์ผ์˜ ๋‚ด์šฉ์€ ๋‹ฌ๋ผ ๋งค๋ฒˆ ํ•จ์ˆ˜๋ฅผ ์ƒˆ๋กญ๊ฒŒ ์ •์˜ํ•ด์•ผํ•˜๋Š” ๋ฌธ์ œ๋กœ ํ•จ์ˆ˜๊ฐ€ ๋ณ€ํ•˜์ง€ ์•Š๋Š” ๊ณตํ†ต๋กœ์ง์€ ๋ฏธ๋ฆฌ ์ •์˜ํ•ด๋‘๊ณ  ๊ฒฝ์šฐ์— ๋”ฐ๋ผ ๋ณ€๊ฒฝ๋˜๋Š” ๋กœ์ง์€ ์ˆ˜ํ–‰ํ™” ํ•ด์„œ ํ•จ์ˆ˜ ์™ธ๋ถ€์—์„œ ํ•จ์ˆ˜ ๋‚ด๋ถ€๋กœ ์ „๋‹ฌํ•˜๊ธฐ ์œ„ํ•ด ์ฝœ๋ฐฑํ•จ์ˆ˜ ์‚ฌ์šฉ

  • ์ฝœ๋ฐฑํ•จ์ˆ˜: ํ•จ์ˆ˜์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ํ†ตํ•ด ๋‹ค๋ฅธ ํ•จ์ˆ˜์˜ ๋‚ด๋ถ€๋กœ ์ „๋‹ฌ๋˜๋Š” ํ•จ์ˆ˜

  • ๊ณ ์ฐจํ•จ์ˆ˜: ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ํ†ตํ•ด ํ•จ์ˆ˜์˜ ์™ธ๋ถ€์—์„œ ์ฝœ๋ฐฑํ•จ์ˆ˜๋ฅผ ์ „๋‹ฌ๋ฐ›์€ ํ•จ์ˆ˜

  • 1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    
    // ์™ธ๋ถ€์—์„œ ์ „๋‹ฌ๋ฐ›์€ f๋ฅผ n๋งŒํผ ๋ฐ˜๋ณต ํ˜ธ์ถœํ•œ๋‹ค.
    function repeat(n, f) {
      for (var i = 0; i < n; i++) {
        f(i); // i๋ฅผ ์ „๋‹ฌํ•˜๋ฉด์„œ f๋ฅผ ํ˜ธ์ถœ
      }
    }
      
    var logAll = function (i) {
      console.log(i);
    };
      
    // ๋ฐ˜๋ณต ํ˜ธ์ถœํ•  ํ•จ์ˆ˜๋ฅผ ์ธ์ˆ˜๋กœ ์ „๋‹ฌํ•œ๋‹ค.
    repeat(5, logAll); // 0 1 2 3 4
      
    var logOdds = function (i) {
      if (i % 2) console.log(i);
    };
      
    // ๋ฐ˜๋ณต ํ˜ธ์ถœํ•  ํ•จ์ˆ˜๋ฅผ ์ธ์ˆ˜๋กœ ์ „๋‹ฌํ•œ๋‹ค.
    repeat(5, logOdds); // 1 3
    
  • ๊ณ ์ฐจ ํ•จ์ˆ˜๋Š” ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ ์ž์‹ ์˜ ์ผ๋ถ€๋ถ„์œผ๋กœ ํ•ฉ์„ฑ

  • ๊ณ ์ฐจ ํ•จ์ˆ˜๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ํ†ตํ•ด ์ „๋‹ฌ๋ฐ›์€ ์ฝœ๋ฐฑํ•จ์ˆ˜์˜ ํ˜ธ์ถœ์‹œ์ ์„ ๊ฒฐ์ •ํ•ด์„œ ํ˜ธ์ถœํ•จ

    • ์ฝœ๋ฐฑํ•จ์ˆ˜๋Š” ๊ณ ์ฐจํ•จ์ˆ˜์— ์˜ํ•ด ํ˜ธ์ถœ๋˜๋ฉฐ ๊ณ ์ฐจํ•จ์ˆ˜๋Š” ํ•„์š”์— ๋”ฐ๋ผ ์ฝœ๋ฐฑํ•จ์ˆ˜์— ์ธ์ˆ˜๋ฅผ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ์Œ
  • ์ฝœ๋ฐฑ ํ•จ์ˆ˜๊ฐ€ ๊ณ ์ฐจ ํ•จ์ˆ˜ ๋‚ด๋ถ€์—๋งŒ ํ˜ธ์ถœ๋œ๋‹ค๋ฉด ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ ์ต๋ช… ํ•จ์ˆ˜ ๋ฆฌํ„ฐ๋Ÿด๋กœ ์ •์˜ํ•˜๋ฉด์„œ ๊ณง๋ฐ”๋กœ ๊ณ ์ฐจ ํ•จ์ˆ˜์— ์ „๋‹ฌํ•˜๋Š” ๊ฒƒ์ด ์ผ๋ฐ˜์ 

    • 1
      2
      3
      4
      5
      
      // ์ต๋ช… ํ•จ์ˆ˜ ๋ฆฌํ„ฐ๋Ÿด์„ ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋กœ ๊ณ ์ฐจ ํ•จ์ˆ˜์— ์ „๋‹ฌํ•œ๋‹ค.
      // ์ต๋ช… ํ•จ์ˆ˜ ๋ฆฌํ„ฐ๋Ÿด์€ repeat ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ๋งˆ๋‹ค ํ‰๊ฐ€๋˜์–ด ํ•จ์ˆ˜ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.
      repeat(5, function (i) {
        if (i % 2) console.log(i);
      }); // 1 3
      
  • ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋Š” ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํŒจ๋Ÿฌ๋‹ค์ž„๋ฟ ์•„๋‹ˆ๋ผ, ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ(์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ, Ajax ํ†ต์‹ , ํƒ€์ด๋จธ ํ•จ์ˆ˜ ๋“ฑ)์— ํ™œ์šฉ๋˜๋Š” ์ค‘์š”ํ•œ ํŒจํ„ด

    • ๋ฐฐ์—ด์˜ ๊ณ ์ฐจ ํ•จ์ˆ˜์—์„œ๋„ ์ž์ฃผ ์‚ฌ์šฉ๋˜๋ฉฐ ๋ฐฐ์—ด์˜ ๊ณ ์ฐจ ํ•จ์ˆ˜๋Š” ๋งค์šฐ ์ค‘์š”

    • 1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      
      // ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•œ ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ
      // myButton ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜๋ฉด ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•œ๋‹ค.
      document.getElementById('myButton').addEventListener('click', function () {
        console.log('button clicked!');
      });
          
      // ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•œ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ
      // 1์ดˆ ํ›„์— ๋ฉ”์‹œ์ง€๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.
      setTimeout(function () {
        console.log('1์ดˆ ๊ฒฝ๊ณผ');
      }, 1000);
      
    • 1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      
      // ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ณ ์ฐจ ํ•จ์ˆ˜ map
      var res = [1, 2, 3].map(function (item) {
        return item * 2;
      });
          
      console.log(res); // [2, 4, 6]
          
      // ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ณ ์ฐจ ํ•จ์ˆ˜ filter
      res = [1, 2, 3].filter(function (item) {
        return item % 2;
      });
          
      console.log(res); // [1, 3]
          
      // ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ณ ์ฐจ ํ•จ์ˆ˜ reduce
      res = [1, 2, 3].reduce(function (acc, cur) {
        return acc + cur;
      }, 0);
          
      console.log(res); // 6
      

์ˆœ์ˆ˜ ํ•จ์ˆ˜์™€ ๋น„์ˆœ์ˆ˜ ํ•จ์ˆ˜

  • ์ˆœ์ˆ˜ ํ•จ์ˆ˜(pure function): ์–ด๋–ค ์™ธ๋ถ€ ์ƒํƒœ์— ์˜์กดํ•˜์ง€๋„ ์•Š๊ณ  ๋ณ€๊ฒฝํ•˜์ง€๋„ ์•Š๋Š”, ์ฆ‰ ๋ถ€์ˆ˜ ํšจ๊ณผ๊ฐ€ ์—†๋Š” ํ•จ์ˆ˜
    • ๋™์ผํ•œ ์ธ์ˆ˜๊ฐ€ ์ „๋‹ฌ๋˜๋ฉด ์–ธ์ œ๋‚˜ ๋™์ผํ•œ ๊ฐ’์„ ๋ฐ˜ํ™˜
    • ์˜ค์ง ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ํ†ตํ•ด ํ•จ์ˆ˜ ๋‚ด๋ถ€๋กœ ์ „๋‹ฌ๋œ ์ธ์ˆ˜์—๊ฒŒ๋งŒ ์˜์กดํ•ด ๋ฐ˜ํ™˜๊ฐ’์„ ๋งŒ๋“ฆ
    • ํ•จ์ˆ˜์˜ ์™ธ๋ถ€์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š์Œ
    • ์–ด๋–ค ์™ธ๋ถ€์ƒํƒœ์—๋„ ์˜์กดํ•˜์ง€ ์•Š์œผ๋ฉฐ ์™ธ๋ถ€ ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€๋„ ์•Š๋Š” ํ•จ์ˆ˜
  • ๋น„์ˆœ์ˆ˜ ํ•จ์ˆ˜(impure function): ์™ธ๋ถ€์— ์ƒํƒœ์— ์˜์กดํ•˜๊ฑฐ๋‚˜ ์™ธ๋ถ€ ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š”, ์ฆ‰ ๋ถ€์ˆ˜ ํšจ๊ณผ๊ฐ€ ์žˆ๋Š” ํ•จ์ˆ˜

    • ์™ธ๋ถ€์ƒํƒœ์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ง€๋Š” ํ•จ์ˆ˜
    • ์™ธ๋ถ€์ƒํƒœ์— ์˜์กดํ•˜๋Š” ํ•จ์ˆ˜
    • ์™ธ๋ถ€์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๋ถ€์ˆ˜ํšจ๊ณผ๊ฐ€ ์กด์žฌ
    • ์™ธ๋ถ€ ์ƒํƒœ๋ฅผ ์˜์กดํ•˜๊ฑฐ๋‚˜ ์™ธ๋ถ€ ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ํ•จ์ˆ˜
  • 1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    
    // ์ˆœ์ˆ˜ํ•จ์ˆ˜
    var count = 0; // ํ˜„์žฌ ์นด์šดํŠธ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ƒํƒœ
      
    // ์ˆœ์ˆ˜ ํ•จ์ˆ˜ increase๋Š” ๋™์ผํ•œ ์ธ์ˆ˜๊ฐ€ ์ „๋‹ฌ๋˜๋ฉด ์–ธ์ œ๋‚˜ ๋™์ผํ•œ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
    function increase(n) {
      return ++n;
    }
      
    // ์ˆœ์ˆ˜ ํ•จ์ˆ˜๊ฐ€ ๋ฐ˜ํ™˜ํ•œ ๊ฒฐ๊ณผ๊ฐ’์„ ๋ณ€์ˆ˜์— ์žฌํ• ๋‹นํ•ด์„œ ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝ
    count = increase(count);
    console.log(count); // 1
      
    count = increase(count);
    console.log(count); // 2
    
  • 1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    
    // ๋น„์ˆœ์ˆ˜ ํ•จ์ˆ˜
    var count = 0; // ํ˜„์žฌ ์นด์šดํŠธ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ƒํƒœ: increase ํ•จ์ˆ˜์— ์˜ํ•ด ๋ณ€ํ™”ํ•œ๋‹ค.
      
    // ๋น„์ˆœ์ˆ˜ ํ•จ์ˆ˜
    function increase() {
      return ++count; // ์™ธ๋ถ€ ์ƒํƒœ์— ์˜์กดํ•˜๋ฉฐ ์™ธ๋ถ€ ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•œ๋‹ค.
    }
      
    // ๋น„์ˆœ์ˆ˜ ํ•จ์ˆ˜๋Š” ์™ธ๋ถ€ ์ƒํƒœ(count)๋ฅผ ๋ณ€๊ฒฝํ•˜๋ฏ€๋กœ ์ƒํƒœ ๋ณ€ํ™”๋ฅผ ์ถ”์ ํ•˜๊ธฐ ์–ด๋ ค์›Œ์ง„๋‹ค.
    increase();
    console.log(count); // 1
      
    increase();
    console.log(count); // 2
    
1
โ—๏ธ ์ฝ์€ ์†Œ๊ฐ

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

1
โ“ ๊ถ๊ธˆํ•œ ๋‚ด์šฉ์ด๋‚˜ ์ž˜ ์ดํ•ด๋˜์ง€ ์•Š๋Š” ๋‚ด์šฉ
  • ์—†์Œ
This post is licensed under CC BY 4.0 by the author.

11์žฅ, ์›์‹œ ๊ฐ’๊ณผ ๊ฐ์ฒด์˜ ๋น„๊ต

13์žฅ, ์Šค์ฝ”ํ”„