์ œ์ˆ˜๊ธฐ > Javascript > Function ๐Ÿ’ฅ

Eunbi Joยท2025๋…„ 1์›” 6์ผ
0

์ œ์ˆ˜๊ธฐ

๋ชฉ๋ก ๋ณด๊ธฐ
49/90
post-thumbnail
์ œ์ˆ˜๊ธฐ - ์ œ๋ฐœ ์ˆ˜์—…๋‚ด์šฉ์„ ๊ธฐ์–ตํ•ด๋ผ | ๋‹จ์ˆœ ์ˆ˜์—…์ •๋ฆฌ

ํ•จ์ˆ˜ ์„ ์–ธ์‹

Function Declaration
; ์ž‘์„ฑํ•  ํ•„์š”์—†๋Š” ํ•˜๋‚˜์˜ ๊ตฌ๋ฌธ

  • ํŠน์ง•:
    - ์ด๋ฆ„ ์žˆ๋Š” ํ•จ์ˆ˜๋กœ ์ž‘์„ฑ๋ฉ๋‹ˆ๋‹ค.
    - function ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ•จ์ˆ˜ ์ด๋ฆ„๊ณผ ํ•จ๊ป˜ ์„ ์–ธํ•ฉ๋‹ˆ๋‹ค.
    - ํ˜ธ์ด์ŠคํŒ…(hoisting)์ด ๋ฉ๋‹ˆ๋‹ค:
    - ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ์ฝ”๋“œ ์‹คํ–‰ ์ „์— ํ•จ์ˆ˜ ์„ ์–ธ์„ ์Šค์ฝ”ํ”„์˜ ์ตœ์ƒ๋‹จ์œผ๋กœ ๋Œ์–ด์˜ฌ๋ฆฝ๋‹ˆ๋‹ค.
    - ๋”ฐ๋ผ์„œ ์„ ์–ธ ์œ„์น˜์™€ ์ƒ๊ด€์—†์ด ํ•จ์ˆ˜ ํ˜ธ์ถœ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

์‹คํ–‰ ๊ฒฐ๊ณผ:
์ฝ˜์†”์—์„œ test1์„ ํ˜ธ์ถœํ•˜๋ฉด "test1"์ด ์ถœ๋ ฅ๋ฉ๋‹ˆ๋‹ค. ํ•จ์ˆ˜ test1์€ ํŒŒ์ผ ๋‚ด ์–ด๋””์—์„œ๋‚˜ ํ˜ธ์ถœ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

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

Function Expression
ํ•จ์ˆ˜๋ฅผ ํ•˜๋‚˜์˜ ๊ฐ’์ฒ˜๋Ÿผ ๋ณ€์ˆ˜์— ๋Œ€์ž…ํ•˜๋Š” ๋ฐฉ์‹

  • ํŠน์ง•:
    - ํ•จ์ˆ˜๋ฅผ ๋ณ€์ˆ˜์— ๋Œ€์ž…ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ž‘์„ฑ๋ฉ๋‹ˆ๋‹ค.
    - ์ต๋ช… ํ•จ์ˆ˜(anonymous function)๊ฐ€ ๋ณ€์ˆ˜์— ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.
    - ํ˜ธ์ด์ŠคํŒ…๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค: ํ•จ์ˆ˜ ํ‘œํ˜„์‹์€ ๋ณ€์ˆ˜ ์„ ์–ธ์ด ์ฒ˜๋ฆฌ๋œ ์ดํ›„์—๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
    - ์„ ์–ธ ์ „์— ํ˜ธ์ถœํ•˜๋ ค๊ณ  ํ•˜๋ฉด ReferenceError๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

์‹คํ–‰ ๊ฒฐ๊ณผ:
์ฝ˜์†”์—์„œ test2๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด "test2"๊ฐ€ ์ถœ๋ ฅ๋ฉ๋‹ˆ๋‹ค. test2๋Š” ๋ณ€์ˆ˜ ์„ ์–ธ ํ›„์—๋งŒ ํ˜ธ์ถœ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

IIFE ๐Ÿ’ฅ

Immediately Invoked Function Expression
์ฆ‰์‹œ ์‹คํ–‰ ํ•จ์ˆ˜ ํ‘œํ˜„์‹
ํ•จ์ˆ˜ ์„ ์–ธ๊ณผ ๋™์‹œ์— ํ˜ธ์ถœํ•˜๋Š” ๋ฌธ๋ฒ•
๋ณ€์ˆ˜ ์Šค์ฝ”ํ”„๋ฅผ ์ œํ•œํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ

  • ๋ฌธ๋ฒ•: (function() { ... })();
    - ํ•จ์ˆ˜ ์„ ์–ธ์„ ๊ด„ํ˜ธ(())๋กœ ๊ฐ์‹ธ๊ณ , ๋’ค์— ํ˜ธ์ถœ์„ ์œ„ํ•œ ๊ด„ํ˜ธ๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ํ•จ์ˆ˜๊ฐ€ ์ฆ‰์‹œ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.
  • ์ฃผ์š” ๋ชฉ์ :
    ๐Ÿ’ฅ์Šค์ฝ”ํ”„๋ฅผ ์ œํ•œํ•˜์—ฌ ๋ณ€์ˆ˜์˜ ๋ฒ”์œ„๋ฅผ ๋กœ์ปฌ๋กœ ์œ ์ง€.
    ๊ธ€๋กœ๋ฒŒ ๋ณ€์ˆ˜ ์˜ค์—ผ์„ ๋ฐฉ์ง€.
  1. ๊ธฐ๋ณธ IIFE ์‚ฌ์šฉ
(function () {
    const someName = "IIFE";
    console.log(someName);
})();
  • ์„ค๋ช…:
    - ์ต๋ช… ํ•จ์ˆ˜๋ฅผ ์ฆ‰์‹œ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.๐Ÿ’ฅ
    - someName ๋ณ€์ˆ˜๋Š” IIFE ๋‚ด๋ถ€์—์„œ๋งŒ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์™ธ๋ถ€์—์„œ ์ด ๋ณ€์ˆ˜๋ฅผ ์ฐธ์กฐํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

  • ์ถœ๋ ฅ: IIFE (์ฝ˜์†”์— ์ถœ๋ ฅ).

  1. ์Šค์ฝ”ํ”„ ํ…Œ์ŠคํŠธ
const someName = "IIFE";
console.log(someName);
  • ์ „์—ญ ๋ณ€์ˆ˜ someName์„ ์„ ์–ธํ•˜์—ฌ ๊ฐ’ "IIFE"๋ฅผ ์ถœ๋ ฅ.
    - ์ด๋Š” IIFE ๋‚ด๋ถ€์˜ someName ๋ณ€์ˆ˜์™€ ์ถฉ๋Œํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๐Ÿ’ฅIIFE๋Š” ์ž์ฒด ์Šค์ฝ”ํ”„๋ฅผ ๊ฐ€์ง€๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.
  • ์ถœ๋ ฅ: IIFE (์ฝ˜์†”์— ์ถœ๋ ฅ).
  1. IIFE์— ๋งค๊ฐœ๋ณ€์ˆ˜ ์ „๋‹ฌ
(function (food) {
    console.log(`I Love ${food}~`);
})("๐Ÿ•๐Ÿ•๐Ÿ•");
  • IIFE์— ๋งค๊ฐœ๋ณ€์ˆ˜(food)๋ฅผ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.
  • ํ•จ์ˆ˜ ์‹คํ–‰ ์‹œ "๐Ÿ•๐Ÿ•๐Ÿ•"๋ฅผ ์ „๋‹ฌํ•˜์—ฌ ๋‚ด๋ถ€์—์„œ ์ด๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • ํ…œํ”Œ๋ฆฟ ๋ฆฌํ„ฐ๋Ÿด(`)์„ ์‚ฌ์šฉํ•ด "I Love ๐Ÿ•๐Ÿ•๐Ÿ•~"๋ฅผ ์ถœ๋ ฅ.
  • ์ถœ๋ ฅ: I Love ๐Ÿ•๐Ÿ•๐Ÿ•~ (์ฝ˜์†”์— ์ถœ๋ ฅ).

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

Arrow Function
์ต๋ช…ํ•จ์ˆ˜๋ฅผ ๊ฐ„๊ฒฐํ•˜๊ฒŒ ์ž‘์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•
() => {}
(a, b) => {ํ•จ์ˆ˜ ๋‚ด์šฉ}

test3๋Š” ์ต๋ช… ํ•จ์ˆ˜๋ฅผ const ๋ณ€์ˆ˜์— ํ• ๋‹นํ•œ ํ•จ์ˆ˜ ํ‘œํ˜„์‹(Function Expression)์ž…๋‹ˆ๋‹ค. ๋‚ด๋ถ€์—์„œ ๋‘ ๊ฐœ์˜ ๋‹ค๋ฅธ ํ•จ์ˆ˜(foo์™€ bar)๋ฅผ ํ˜ธ์ถœํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

  • foo("ํ™๊ธธ๋™") ํ˜ธ์ถœ:
    foo ํ•จ์ˆ˜๋Š” ๋ฌธ์ž์—ด "ํ™๊ธธ๋™"์„ ์ธ์ˆ˜๋กœ ์ „๋‹ฌ๋ฐ›์Šต๋‹ˆ๋‹ค.
    ์‹คํ–‰ ๊ฒฐ๊ณผ๋กœ foo: ํ™๊ธธ๋™์ด ์ถœ๋ ฅ๋ฉ๋‹ˆ๋‹ค. ์ด๋Š” foo ํ•จ์ˆ˜๊ฐ€ ์ „๋‹ฌ๋ฐ›์€ ๊ฐ’์„ ๋กœ๊ทธ์— ์ถœ๋ ฅํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•”์‹œํ•ฉ๋‹ˆ๋‹ค.

  • bar("์‹ ์‚ฌ์ž„๋‹น") ํ˜ธ์ถœ:
    bar ํ•จ์ˆ˜๋Š” ๋ฌธ์ž์—ด "์‹ ์‚ฌ์ž„๋‹น"์„ ์ธ์ˆ˜๋กœ ์ „๋‹ฌ๋ฐ›์Šต๋‹ˆ๋‹ค.
    ์‹คํ–‰ ๊ฒฐ๊ณผ๋กœ bar: ์‹ ์‚ฌ์ž„๋‹น์ด ์ถœ๋ ฅ๋ฉ๋‹ˆ๋‹ค.
    ์ด๋Š” bar ํ•จ์ˆ˜ ์—ญ์‹œ ์ „๋‹ฌ๋ฐ›์€ ๊ฐ’์„ ๊ฐ€๊ณตํ•˜์ง€ ์•Š๊ณ  ๋ฐ”๋กœ ์ถœ๋ ฅํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•”์‹œํ•ฉ๋‹ˆ๋‹ค.

์‹คํ–‰๊ตฌ๋ฌธ ํ•œ์ค„์ธ ๊ฒฝ์šฐ, ์ค‘๊ด„ํ˜ธ ์ƒ๋žต๊ฐ€๋Šฅ

const foo = (name) => console.log("foo: ", name);

  • ํ™”์‚ดํ‘œ ํ•จ์ˆ˜์—์„œ ์‹คํ–‰ ์ฝ”๋“œ๊ฐ€ ํ•œ ์ค„์ธ ๊ฒฝ์šฐ, ์ค‘๊ด„ํ˜ธ {}๋ฅผ ์ƒ๋žตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ค‘๊ด„ํ˜ธ๋ฅผ ์ƒ๋žตํ•˜๋ฉด ํ•ด๋‹น ์ค„์˜ ๊ฒฐ๊ณผ๊ฐ€ ์ž๋™์œผ๋กœ ๋ฐ˜ํ™˜๋ฉ๋‹ˆ๋‹ค(๋ฆฌํ„ด๊ฐ’์ด ์žˆ๋Š” ๊ฒฝ์šฐ).
  • ์œ„ ์ฝ”๋“œ์—์„œ console.log("foo: ", name);์€ ํ•œ ์ค„์งœ๋ฆฌ ์‹คํ–‰ ์ฝ”๋“œ์ด๋ฏ€๋กœ ์ค‘๊ด„ํ˜ธ๋ฅผ ์ƒ๋žตํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ํ•˜๋‚˜์ธ ๊ฒฝ์šฐ, ์†Œ๊ด„ํ˜ธ ์ƒ๋žต๊ฐ€๋Šฅ (์ƒ๋žตํ•˜์ง€ ๋ง๊ฒƒ์„ ๊ถŒ์žฅ)

  • ์ƒ๋žต ๊ฐ€๋Šฅ ์˜ˆ์‹œ:
const foo = name => console.log("foo: ", name);
  • ์†Œ๊ด„ํ˜ธ ์‚ฌ์šฉ:
const foo = (name) => console.log("foo: ", name);
  • ํ™”์‚ดํ‘œ ํ•จ์ˆ˜์—์„œ ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ํ•˜๋‚˜๋งŒ ์žˆ์„ ๋•Œ๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๊ฐ์‹ธ๋Š” ์†Œ๊ด„ํ˜ธ ()๋ฅผ ์ƒ๋žตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๊ทธ๋Ÿฌ๋‚˜ ์ฝ”๋“œ์˜ ์ผ๊ด€์„ฑ๊ณผ ๊ฐ€๋…์„ฑ์„ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์†Œ๊ด„ํ˜ธ๋ฅผ ์ƒ๋žตํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ๊ถŒ์žฅ๋ฉ๋‹ˆ๋‹ค.
  • ๋”ฐ๋ผ์„œ (name)์ฒ˜๋Ÿผ ํ•ญ์ƒ ์†Œ๊ด„ํ˜ธ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ์ถ”์ฒœํ•ฉ๋‹ˆ๋‹ค.

๋ฆฌํ„ด๊ตฌ๋ฌธ ํ•œ์ค„์ธ ๊ฒฝ์šฐ, ์ค‘๊ด„ํ˜ธ, returnํ‚ค์›Œ๋“œ ์ƒ๋žต๊ฐ€๋Šฅ

์˜ˆ์‹œ: ์ค‘๊ด„ํ˜ธ์™€ return ์ƒ๋žต
const bar = (name) => `bar : ${name}`;

  • ๋ฆฌํ„ด ๊ตฌ๋ฌธ์ด ํ•œ ์ค„๋กœ ์ž‘์„ฑ๋˜๋Š” ๊ฒฝ์šฐ, ์ค‘๊ด„ํ˜ธ {}์™€ return ํ‚ค์›Œ๋“œ๋ฅผ ์ƒ๋žตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์œ„ ์ฝ”๋“œ์—์„œ, bar: ${name} ๋ฌธ์ž์—ด์ด ์ž๋™์œผ๋กœ ๋ฐ˜ํ™˜๋ฉ๋‹ˆ๋‹ค.

1๊ธ‰๊ฐ์ฒด ํ•จ์ˆ˜ - ๋งค๊ฐœ์ธ์ž

JavaScript์—์„œ๋Š” ํ•จ์ˆ˜๊ฐ€ ์ผ๊ธ‰ ๊ฐ์ฒด(First-Class Object)๋กœ ์ทจ๊ธ‰๋ฉ๋‹ˆ๋‹ค. ์ด๋Š” ํ•จ์ˆ˜๋ฅผ ๋ณ€์ˆ˜์— ๋Œ€์ž…ํ•˜๊ฑฐ๋‚˜, ๋‹ค๋ฅธ ํ•จ์ˆ˜์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ „๋‹ฌํ•˜๊ฑฐ๋‚˜, ํ•จ์ˆ˜์˜ ๋ฐ˜ํ™˜๊ฐ’์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

1. ํ•จ์ˆ˜๋ฅผ ๋ณ€์ˆ˜์— ๋Œ€์ž…ํ•  ์ˆ˜ ์žˆ๋‹ค.(ํ•จ์ˆ˜ํ‘œํ˜„์‹)

const func = () => console.log("HelloWorld");
console.log(func); // () => console.log("HelloWorld")
func();            // HelloWorld
  • ํ•จ์ˆ˜๋Š” ๋ณ€์ˆ˜์— ๋Œ€์ž…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์œ„ ์ฝ”๋“œ์—์„œ ํ™”์‚ดํ‘œ ํ•จ์ˆ˜ (name) => {}๋Š” ๋ณ€์ˆ˜ func์— ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.
  • console.log(func)๋Š” ํ•จ์ˆ˜ ์ž์ฒด๋ฅผ ์ถœ๋ ฅํ•˜๊ณ , func()๋Š” ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.
  • ์ด๋Ÿฌํ•œ ๋ฐฉ์‹์€ ํ•จ์ˆ˜ ํ‘œํ˜„์‹(Function Expression)์˜ ์ „ํ˜•์ ์ธ ํ˜•ํƒœ์ž…๋‹ˆ๋‹ค.

2. ํ•จ์ˆ˜๋ฅผ ๋งค๊ฐœ์ธ์ž๋กœ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋‹ค. (์ฝœ๋ฐฑํ•จ์ˆ˜)

const test = (callback) => {
    callback(); // ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋ฐ›์€ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœ
};

test(() => console.log("This is a callback!")); // This is a callback!
  • ํ•จ์ˆ˜๋Š” ๋‹ค๋ฅธ ํ•จ์ˆ˜์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ „๋‹ฌ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์œ„ ์ฝ”๋“œ์—์„œ test ํ•จ์ˆ˜๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ „๋‹ฌ๋œ ํ•จ์ˆ˜๋ฅผ callback()์œผ๋กœ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.
  • ์ด์ฒ˜๋Ÿผ ๋‹ค๋ฅธ ํ•จ์ˆ˜์˜ ์ธ์ž๋กœ ์ „๋‹ฌ๋˜๋Š” ํ•จ์ˆ˜๋ฅผ ์ฝœ๋ฐฑ ํ•จ์ˆ˜(Callback Function)๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค

3. ํ•จ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜๊ฐ’์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

const test4 = () => {
    const func = () => console.log("HelloWorld");
    console.log(func); // () => console.log("HelloWorld")
    func();            // HelloWorld
    return func;       // ํ•จ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜
};

const f = test4();  // test4 ํ•จ์ˆ˜๊ฐ€ ๋ฐ˜ํ™˜ํ•œ func๋ฅผ ๋ณ€์ˆ˜ f์— ์ €์žฅ
console.log(f);     // () => console.log("HelloWorld")
f();                // HelloWorld
  • ํ•จ์ˆ˜๋Š” ๋˜ ๋‹ค๋ฅธ ํ•จ์ˆ˜์˜ ๋ฐ˜ํ™˜๊ฐ’์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์œ„ ์ฝ”๋“œ์—์„œ test4 ํ•จ์ˆ˜๋Š” func ํ•จ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋ฉฐ, ๋ฐ˜ํ™˜๋œ ํ•จ์ˆ˜๋Š” ๋ณ€์ˆ˜ f์— ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.
  • ์ดํ›„ f()๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ๋ฐ˜ํ™˜๋œ ํ•จ์ˆ˜ func๊ฐ€ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

runner(func);

func๋ฅผ ์ „๋‹ฌํ•ด์„œ runnerํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœ

const r = (i) => console.log(`Helloworld${i}`);
runner2(r);
  • ์—ญํ• :
    r์€ ํ™”์‚ดํ‘œ ํ•จ์ˆ˜(Arrow Function)๋กœ ์ •์˜๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
    ์ธ์ˆ˜ i๋ฅผ ๋ฐ›์•„์„œ ๋ฌธ์ž์—ด "Helloworld" ๋’ค์— i ๊ฐ’์„ ๋ถ™์—ฌ ์ฝ˜์†”์— ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.
  • ์‹คํ–‰:
    runner2(r)๋ฅผ ํ˜ธ์ถœํ•˜๋ฉฐ, ํ•จ์ˆ˜ r์„ runner2์— ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.
const runner = (f) => {
    for (let i = 0; i < 10; i++) {
        f(); // ์ „๋‹ฌ๋ฐ›์€ ํ•จ์ˆ˜ f ์‹คํ–‰
    }
};
  • ์—ญํ• :
    runner๋Š” ํ•จ์ˆ˜ f๋ฅผ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋ฐ›์•„์„œ 0๋ถ€ํ„ฐ 9๊นŒ์ง€ ๋ฐ˜๋ณต๋ฌธ์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
    ๊ฐ ๋ฐ˜๋ณต๋งˆ๋‹ค f()๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.
  • ์ œ์•ฝ:
    ์ด ์ฝ”๋“œ์—์„œ๋Š” f๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ ์ธ์ˆ˜๋ฅผ ์ „๋‹ฌํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ, f๋Š” ํ˜ธ์ถœ๋  ๋•Œ ๊ฐ’์„ ๋ฐ›์•„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
const runner2 = (f) => {
    for (let i = 0; i < 10; i++) {
        f(i + 1); // ๋ฐ˜๋ณต๋ฌธ์—์„œ ์ฆ๊ฐ€๋œ i ๊ฐ’์„ ์ „๋‹ฌ
    }
};
  • ์—ญํ•  :
    runner2๋Š” ํ•จ์ˆ˜ f๋ฅผ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋ฐ›์•„ ๋ฐ˜๋ณต ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
    ๊ฐ ๋ฐ˜๋ณต์—์„œ f๋ฅผ ํ˜ธ์ถœํ•˜๋ฉฐ, ๋ฐ˜๋ณต๋ฌธ์˜ ๋ณ€์ˆ˜ i์— 1์„ ๋”ํ•œ ๊ฐ’์„ f์— ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.
  • ์‹คํ–‰ ๊ฒฐ๊ณผ:
    runner2(r) ํ˜ธ์ถœ ์‹œ:
    r์ด ์‹คํ–‰๋˜๋ฉฐ, Helloworld1, Helloworld2, ..., Helloworld10์ด ์ถœ๋ ฅ๋ฉ๋‹ˆ๋‹ค.

1๊ธ‰๊ฐ์ฒด ํ•จ์ˆ˜ - ๋ฆฌํ„ด๊ฐ’

์ด ์ฝ”๋“œ๋Š” ํด๋กœ์ €(closure)์™€ ๊ณ ์ฐจ ํ•จ์ˆ˜(high-order function)๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๋™์ ์œผ๋กœ ๋™์ž‘ํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์‹คํ–‰ํ•˜๋Š” ๊ตฌ์กฐ๋ฅผ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค

1. desertMaker ํ•จ์ˆ˜

const desertMaker = () => console.log("๐Ÿฐ");
  • ์„ค๋ช…:
    desertMaker๋Š” ํ™”์‚ดํ‘œ ํ•จ์ˆ˜๋กœ ์ •์˜๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
    ํ˜ธ์ถœ ์‹œ, ๋ฐ”๋กœ "๐Ÿฐ"๋ฅผ ์ฝ˜์†”์— ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.
  • ์‹คํ–‰ ๊ฒฐ๊ณผ:
console.log(f); // undefined (์ฝ˜์†”์— ์ถœ๋ ฅ๋œ ๊ฐ’์€ ์—†์Œ, ์ด๋ฏธ desertMaker๋Š” ์‹คํ–‰๋จ)
f(); // TypeError: f is not a function

2. customDesertMaker ํ•จ์ˆ˜

const customDesertMaker = (desert) => {
    return (name) => console.log(`${name}์—๊ฒŒ ${desert}๋ฅผ ๋ณด๋‚ธ๋‹ค.`);
};
  • ์„ค๋ช…:
    customDesertMaker๋Š” ๊ณ ์ฐจ ํ•จ์ˆ˜๋กœ, ๋‹ค๋ฅธ ํ•จ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
    ํ˜ธ์ถœ ์‹œ, desert(๋””์ €ํŠธ ์ด๋ฆ„)๋ฅผ ๊ณ ์ •ํ•˜๋ฉฐ, ๋ฐ˜ํ™˜๋œ ํ•จ์ˆ˜๋Š” name(๋ฐ›๋Š” ์‚ฌ๋žŒ ์ด๋ฆ„)์„ ๋ฐ›์•„ ์ฝ˜์†”์— ๋ฉ”์‹œ์ง€๋ฅผ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.
  • ์‚ฌ์šฉ ์˜ˆ์‹œ:
const printCandy = customDesertMaker("๐Ÿฌ");
printCandy("๊ธธ๋™"); // "๊ธธ๋™์—๊ฒŒ ๐Ÿฌ๋ฅผ ๋ณด๋‚ธ๋‹ค."

const printIcecream = customDesertMaker("๐Ÿฆ");
printIcecream("์‚ฌ์ž„๋‹น"); // "์‚ฌ์ž„๋‹น์—๊ฒŒ ๐Ÿฆ๋ฅผ ๋ณด๋‚ธ๋‹ค."
  1. ํด๋กœ์ €(Closure)
    customDesertMaker๋Š” ์™ธ๋ถ€ ํ•จ์ˆ˜์˜ ๋ณ€์ˆ˜๋ฅผ ๋‚ด๋ถ€ ํ•จ์ˆ˜์—์„œ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๋Š” ํด๋กœ์ €๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
    ๋‚ด๋ถ€ ํ•จ์ˆ˜์—์„œ desert ๊ฐ’์„ ๊ธฐ์–ตํ•˜๊ณ , ์ด๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๋™์ ์œผ๋กœ ๋ฉ”์‹œ์ง€๋ฅผ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.
  2. ๊ณ ์ฐจ ํ•จ์ˆ˜(High-Order Function)
    customDesertMaker๋Š” ํ•จ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ณ ์ฐจ ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค.
    ๋ฐ˜ํ™˜๋œ ํ•จ์ˆ˜๋Š” name์„ ๋ฐ›์•„ ๋””์ €ํŠธ๋ฅผ ์ „๋‹ฌํ•˜๋Š” ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  3. ๋™์  ํ•จ์ˆ˜ ์ƒ์„ฑ
    ๋‹ค์–‘ํ•œ ๋””์ €ํŠธ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ๋™์ ์œผ๋กœ ์ƒ์„ฑํ•˜์—ฌ ์žฌ์‚ฌ์šฉ์„ฑ์„ ๋†’์ž…๋‹ˆ๋‹ค.

0๊ฐœ์˜ ๋Œ“๊ธ€