GiantStepDEV
article thumbnail

ํ•จ์ˆ˜?

  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ฐœ๋… (์ž๋ฐ”์—์„œ๋Š” ๋ฉ”์†Œ๋“œ๋ผ๋Š” ์šฉ์–ด๋กœ ์‚ฌ์šฉ)
  • ํŠน์ • ์ž‘์—…์„ ์—ฌ๋Ÿฌ๋ฒˆ ๋ฐ˜๋ณตํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ, ํ•ด๋‹น ์ž‘์—…์„ ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๊ตฌ์กฐ๋กœ ๋งŒ๋“ค๊ฒŒ ๋˜๋Š”๋ฐ ์ด ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ํ•จ์ˆ˜ ์ž…๋‹ˆ๋‹ค.
  • ์ž…๋ ฅ๊ฐ’์„ ๊ฒ€์ฆํ•˜๊ณ  ์˜ฌ๋ฐ”๋ฅด์ง€ ์•Š์€ ๊ฒฝ์šฐ, ์˜ˆ์™ธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ฌ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. (try ~ catch)
  • ์ „์—ญ ๋ณ€์ˆ˜ ์‚ฌ์šฉ์„ ์ค„์ด๊ณ , ํ•จ์ˆ˜ ๋‚ด์—์„œ๋งŒ ์œ ํšจํ•œ ๋ณ€์ˆ˜(์ง€์—ญ๋ณ€์ˆ˜)๋ฅผ ์„ ์–ธ ํ•ฉ๋‹ˆ๋‹ค.
  • ๋น„๋™๊ธฐ์ ์œผ๋กœ ์‹คํ–‰๋˜๋Š” ์ฝ”๋“œ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ ์ •์˜ ํ•ฉ๋‹ˆ๋‹ค.
  • ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ , ๊ฐ์ฒด์˜ ์†์„ฑ๊ณผ ๋ฉ”์†Œ๋“œ๋ฅผ ์ •์˜ ํ•ฉ๋‹ˆ๋‹ค.
  • ํ•จ์ˆ˜๋ฅผ ์ธ์ž๋กœ ๋ฐ›์•„์„œ, ๋‹ค๋ฅธ ํ•จ์ˆ˜์—์„œ ์‹คํ–‰ ํ•ฉ๋‹ˆ๋‹ค.

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ํ•จ์ˆ˜๋Š” [ํ•จ์ˆ˜ ์„ ์–ธ๋ฌธ] ๋˜๋Š” [ํ•จ์ˆ˜ ํ‘œํ˜„์‹]์œผ๋กœ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


1๏ธโƒฃํ•จ์ˆ˜ ์„ ์–ธ๋ฌธ

  • function ํ‚ค์›Œ๋“œ๋กœ ์„ ์–ธํ•˜๋ฉฐ ํ•จ์ˆ˜ ์ด๋ฆ„์„ ๊ฐ€์ง‘๋‹ˆ๋‹ค.
  • ํ˜ธ์ด์ŠคํŒ…์— ์˜ํ–ฅ์„ ๋ฐ›์Šต๋‹ˆ๋‹ค. == ํ•จ์ˆ˜๊ฐ€ ์„ ์–ธ๋œ ์œ„์น˜์— ์ƒ๊ด€์—†์ด ํ˜ธ์ถœํ•˜์—ฌ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Œ

๐Ÿ’ก ํ˜ธ์ด์ŠคํŒ… : ํ•จ์ˆ˜๋‚˜ ๋ณ€์ˆ˜๊ฐ€ ํ•ด๋‹น ์Šค์ฝ”ํ”„์˜ ์ตœ์ƒ๋‹จ์œผ๋กœ ๋Œ์–ด ์˜ฌ๋ ค์ง€๋Š” ๊ฒƒ

function sum(p1, p2) {
	let sum = p1 + p2;
    return sum;
}

ํ•จ์ˆ˜๋ฅผ ์ด๋ฃจ๋Š” ์š”์†Œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ํ•จ์ˆ˜ ์„ ์–ธ ํ‚ค์›Œ๋“œ function
  • ํ•จ์ˆ˜๋ช…
  • ์ž…๋ ฅ ํŒŒ๋ผ๋ฏธํ„ฐ (์˜ต์…˜)
  • ์ฝ”๋“œ ๋ธ”๋ก
  • ๋ฐ˜ํ™˜๊ฐ’(return) (์˜ต์…˜)
ํ•จ์ˆ˜๋ช…์„ ์‚ฌ์šฉํ•ด์„œ ํ˜ธ์ถœ์„ ํ•ด์•ผ๋งŒ ์‹คํ–‰ ๋ฉ๋‹ˆ๋‹ค.
let sum1 = sum(21,24); // ํ•จ์ˆ˜ ํ˜ธ์ถœ
console.log(sum1); // ์ถœ๋ ฅ

ํ•จ์ˆ˜์™€ switch๋ฌธ

function calculator(n1, n2, op) {
    switch(op) {
        case "+":
            return add(n1, n2);
        case "-":
            return sub(n1, n2);
        case "*":
            return mul(n1, n2);
        case "/":
            return div(n1, n2);
    }
}
function add(n1, n2) {
    return n1 + n2;
}
function sub(n1, n2) {
    return n1 - n2;
}
function mul(n1, n2) {
    return n1 * n2;
}
function div(n1, n2) {
    return n1 / n2;
}

console.log("๋ง์…ˆ : " + calculator(10, 20, "+"));
console.log("๋บ„์…ˆ : " + calculator(10, 20, "-"));
console.log("๊ณฑ์…ˆ : " + calculator(10, 20, "*"));
console.log("๋‚˜๋ˆ—์…ˆ : " + calculator(10, 20, "/"));

๐Ÿฆ ํ•จ์ˆ˜์˜ ์„ ์–ธ๊ณผ ์‹คํ–‰ ์ˆœ์„œ

์œ„์˜ ์ฝ”๋“œ๋ฅผ ์•„๋ž˜์™€ ๊ฐ™์ด ํ•จ์ˆ˜ ๊ตฌํ˜„ ์ด์ „์— ๋จผ์ € ํ˜ธ์ถœํ•˜์—ฌ๋„ ์ •์ƒ ์‹คํ–‰ ๋ฉ๋‹ˆ๋‹ค.

์›น ๋ธŒ๋ผ์šฐ์ €์—์„œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ์ฝ”๋“œ๋ฅผ ํ•ด์„ํ•  ๋•Œ ํ•จ์ˆ˜์˜ ์„ ์–ธ ๋ถ€๋ถ„์„ ์ฝ”๋“œ์˜ ์œ—์ชฝ์œผ๋กœ ์˜ฎ๊ฒจ์„œ ๋จผ์ € ํ•ด์„ ํ•ฉ๋‹ˆ๋‹ค.(ํ˜ธ์ด์ŠคํŒ…)

console.log("๋ง์…ˆ : " + calculator(10, 20, "+"));
console.log("๋บ„์…ˆ : " + calculator(10, 20, "-"));
console.log("๊ณฑ์…ˆ : " + calculator(10, 20, "*"));
console.log("๋‚˜๋ˆ—์…ˆ : " + calculator(10, 20, "/"));

function calculator(n1, n2, op) {
    switch(op) {
        case "+":
            return add(n1, n2);
        case "-":
            return sub(n1, n2);
        case "*":
            return mul(n1, n2);
        case "/":
            return div(n1, n2);
    }
}
function add(n1, n2) {
    return n1 + n2;
}
function sub(n1, n2) {
    return n1 - n2;
}
function mul(n1, n2) {
    return n1 * n2;
}
function div(n1, n2) {
    return n1 / n2;
}

2๏ธโƒฃํ•จ์ˆ˜ ํ‘œํ˜„์‹

  • ๋ณ€์ˆ˜์— ํ•จ์ˆ˜๋ฅผ ํ• ๋‹นํ•ด์„œ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹ ์ž…๋‹ˆ๋‹ค.
  • ํ•จ์ˆ˜๋Š” ๊ฐ์ฒด์˜ ํŒŒ์ƒ๋œ ์ž๋ฃŒํ˜• ์ž…๋‹ˆ๋‹ค. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ์ž๋ฃŒํ˜•์€ ๋ณ€์ˆ˜์— ํ• ๋‹นํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ํ•จ์ˆ˜๋„ ๋ณ€์ˆ˜์— ํ• ๋‹นํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ์ด์šฉํ•œ ํ•จ์ˆ˜ ์ •์˜ ๋ฐฉ๋ฒ•์„ ํ•จ์ˆ˜ ํ‘œํ˜„์‹์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.
  • ํ•จ์ˆ˜ ํ‘œํ˜„์‹์€ ํ˜ธ์ด์ŠคํŒ…์ด ์ ์šฉ๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์„ ์–ธ๋˜๋Š” ์œ„์น˜๊ฐ€ ๋งค์šฐ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

ํ•จ์ˆ˜ ํ‘œํ˜„์‹์€ ๋ณ€์ˆ˜์— ํ• ๋‹นํ•˜๋Š” ํ•จ์ˆ˜์— ์‹๋ณ„์ž๊ฐ€ ์žˆ์œผ๋ฉด [๋„ค์ด๋ฐ ํ•จ์ˆ˜], ์—†์œผ๋ฉด [์ต๋ช… ํ•จ์ˆ˜] ๋ผ๊ณ  ๊ตฌ๋ถ„ ํ•ฉ๋‹ˆ๋‹ค.

 

๐Ÿ’ก ๋ณดํ†ต ํ•จ์ˆ˜ ํ‘œํ˜„์‹์€ ์ต๋ช… ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ์“ฐ์ž…๋‹ˆ๋‹ค.


์ต๋ช… ํ•จ์ˆ˜

const ๋ณ€์ˆ˜๋ช… = function();
const gugudan = function() {
  for(let i = 1; i < 10; i++) {
    console.log(`3 * ${i} = ${3 * i}`);
  }
}
gugudan();

๋„ค์ด๋ฐ ํ•จ์ˆ˜

const ๋ณ€์ˆ˜๋ช… = function ์‹๋ณ„์ž() {};
const gugudan = function naming(){
    for(let i = 1; i < 10; i++) {
        console.log(`3 * ${i} = ${3 * i}`);
    }
}
gugudan();

โš ๏ธ ์•„๋ž˜ ์ฝ”๋“œ๋Š” ์—๋Ÿฌ ๋ฐœ์ƒ

gugudan();

const gugudan = function naming(){
    for(let i = 1; i < 10; i++) {
        console.log(`3 * ${i} = ${3 * i}`);
    }
}

3๏ธโƒฃํ™”์‚ดํ‘œ ํ•จ์ˆ˜

  • ํ™”์‚ดํ‘œ ํ•จ์ˆ˜๋Š” ES6์—์„œ ์ถ”๊ฐ€๋œ ์ƒˆ๋กœ์šด ํ•จ์ˆ˜ ์„ ์–ธ ๋ฐฉ๋ฒ• ์ž…๋‹ˆ๋‹ค.
  • ํ™”์‚ดํ‘œ ํ•จ์ˆ˜๋Š” ํ•จ์ˆ˜ ์„ ์–ธ์‹๋ณด๋‹ค ๊ฐ„๊ฒฐํ•˜๊ณ  ๊ฐ€๋…์„ฑ์ด ์ข‹์•„์„œ ๋งŽ์ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
// ํ•จ์ˆ˜ ์„ ์–ธ๋ฌธ
console hi = function() {
	return "์•ˆ๋…•ํ•˜์„ธ์š”.";
}

// ํ™”์‚ดํ‘œ ํ•จ์ˆ˜
console hi2 = () => "์•ˆ๋…•ํ•˜์„ธ์š”.";

๋งค๊ฐœ๋ณ€์ˆ˜์— ๋”ฐ๋ฅธ ํ‘œํ˜„์‹

// ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ 1๊ฐœ๋งŒ ์žˆ์„ ๊ฒฝ์šฐ
const hi = name => console.log(name + "๋‹˜ ์•ˆ๋…•ํ•˜์„ธ์š”.");

// ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ 2๊ฐœ ์ด์ƒ์ธ ๊ฒฝ์šฐ
const hi2 = (name, age) => console.log(name + "์€ " + age + "์‚ด์ด๋‹ค.");

// ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์—†์„ ๊ฒฝ์šฐ
const hi3 = () => "์•ˆ๋…•ํ•˜์„ธ์š”?";

์•„๋ž˜์—์„œ ๋งค๊ฐœ๋ณ€์ˆ˜์™€ ์ธ์ˆ˜์— ๊ด€ํ•ด ๋” ์ž์„ธํ•˜๊ฒŒ ๋‹ค๋ฃจ์–ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

๋งค๊ฐœ๋ณ€์ˆ˜(parameter)์™€ ์ธ์ˆ˜(argument)

function ํ•จ์ˆ˜๋ช…(๋งค๊ฐœ๋ณ€์ˆ˜1, ๋งค๊ฐœ๋ณ€์ˆ˜2, ๋งค๊ฐœ๋ณ€์ˆ˜3 ...) {}
ํ•จ์ˆ˜๋ช…(์ธ์ˆ˜1, ์ธ์ˆ˜2, ์ธ์ˆ˜3 ...);
  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•˜๊ณ  ๊ฐ’์„ ํ• ๋‹นํ•˜์ง€ ์•Š์œผ๋ฉด undefined ๊ฐ’์œผ๋กœ ์ดˆ๊ธฐํ™” ๋˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋งค๊ฐœ๋ณ€์ˆ˜๋„ ํ•จ์ˆ˜ ํ˜ธ์ถœ์‹œ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•˜์ง€ ์•Š์œผ๋ฉด undefined ๊ฐ’์ด ํ• ๋‹น๋˜์–ด ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•ด๋„ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๊ธฐ๋ณธ๊ฐ’ ํ• ๋‹น

  • ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ •์˜ํ•˜๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•˜์ง€ ์•Š์œผ๋ฉด ๋งค๊ฐœ๋ณ€์ˆ˜์—๋Š” undefined ๊ฐ’์ด ์ž๋™์œผ๋กœ ํ• ๋‹น๋ฉ๋‹ˆ๋‹ค.
  • ES6 ๋ถ€ํ„ฐ๋Š” ๊ธฐ๋ณธ๊ฐ’์„ ์ง€์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
function sum(a = 10, b = 20) {
    console.log(a, b);
}
sum(); // 10, 20

๐Ÿ’ก ์œ„์—์„œ ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด ๋งค๊ฐœ๋ณ€์ˆ˜์— ๊ฐ’์„ ํ• ๋‹น ์•ˆํ•ด๋„ ์—๋Ÿฌ๊ฐ€ ์•ˆ๋‚˜๊ธฐ ๋•Œ๋ฌธ์— ์กฐ์‹ฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

const sum4 = (a = 10, b = 20, c) => console.log(a,b,c);
sum4(); // 10, 20, undefined

return๋ฌธ

  • ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•˜๋ ค๋ฉด ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ •์˜ํ•ด์•ผ ํ•˜๋“ฏ์ด, ํ•จ์ˆ˜ ์™ธ๋ถ€๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ˜ํ™˜ํ•  ๋•Œ๋Š” return๋ฌธ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
function sum(a = 10, b = 20) {
    return a + b;
}

const result = sum(100, 200);
console.log("๊ฒฐ๊ณผ : " + result);
const sum = (num1, num2) => num1 + num2;
console.log("๊ฒฐ๊ณผ : " + sum(100, 200));

4๏ธโƒฃCallback ํ•จ์ˆ˜

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

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

๋น„๋™๊ธฐ์  ํ…Œํฌ๋‹‰์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ

  1. ์‚ฌ์šฉ์ž์˜ ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ
  2. ๋„คํŠธ์›Œํฌ ์‘๋‹ต ์ฒ˜๋ฆฌ
  3. ํŒŒ์ผ์„ ์ฝ๊ณ  ์“ฐ๋Š” ๋™์ž‘
  4. ์˜๋„์ ์œผ๋กœ ์‹œ๊ฐ„ ์ง€์—ฐ์ด ํ•„์š”ํ•œ ๊ธฐ๋Šฅ

ํ•จ์ˆ˜๋ฅผ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋„˜๊ธฐ๊ธฐ

function cry() {
    console.log("cry");
}
function sing() {
    console.log("sing");
}
function dance() {
    console.log("dance");
}
// ์ผ๋ฐ˜ ํ•จ์ˆ˜๋กœ ํ˜ธ์ถœ
function checkMood(mood) {
    if(mood === "good") sing();
    else cry();
}
checkMood("good");
checkMood("sad");
// ์ฝœ๋ฐฑ ํ•จ์ˆ˜
function checkMoodCallback(mood, goodCall, badCall) {
    if(mood === "good") goodCall();
    else badCall();
}
checkMoodCallback("good", dance, cry);
checkMoodCallback("Not bad", dance, sing);

ํƒ€์ด๋จธ ์„ค์ •๊ณผ Callback ํ•จ์ˆ˜

function buy_tobe(item, price, quantity, callback) {
    console.log(item + " ์ƒํ’ˆ์„ " + quantity + "๊ฐœ ๊ณจ๋ผ์„œ ์ ์›์—๊ฒŒ ์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค.");
    setTimeout(function () {
        console.log("๊ณ„์‚ฐ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.");
        var total = price * quantity;
        callback(total);
    }, 2000);
}
function pay(n) {
    console.log("์ง€๋ถˆ ํ•  ๊ธˆ์•ก์€ : " + n + "์ž…๋‹ˆ๋‹ค.");
}

buy_tobe("\'๋ฐค๊ณ ๊ตฌ๋งˆ ๋ง›์—†์Œ\'", 1000, 5, pay);

์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ์—์„œ ์ฝœ๋ฐฑ ํ•จ์ˆ˜ ์‚ฌ์šฉํ•˜๊ธฐ

  • ์›น ํŽ˜์ด์ง€์—์„œ ๋ฐœ์ƒํ•˜๋Š” ์ด๋ฒคํŠธ๋Š” ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    ์ด ๋•Œ, ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ์—์„œ๋Š” ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ์‹คํ–‰ํ•  ํ•จ์ˆ˜๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
let btn = document.querySelector("#myBottn");
btn.addEventListener('click', callBtn);

function callBtn() {
  console.log("Button์ด ๋ˆŒ๋ ค ์กŒ์Šต๋‹ˆ๋‹ค.");
}

๐Ÿ‘‰ ์œ„ ์ฝ”๋“œ์—์„œ๋Š” addEventListener() ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฒ„ํŠผ ํด๋ฆญ ์ด๋ฒคํŠธ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ์—์„œ๋Š” ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํด๋ฆญ๋˜์—ˆ์„ ๋•Œ ์‹คํ–‰ํ•  ํ•จ์ˆ˜๋ฅผ ์ง€์ •ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๋น„๋™๊ธฐ์  ์ž‘์—…์—์„œ ์ฝœ๋ฐฑ ํ•จ์ˆ˜ ์‚ฌ์šฉํ•˜๊ธฐ

  • ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๊ฑฐ๋‚˜ ํŒŒ์ผ์„ ์ฝ์–ด์˜ฌ ๋•Œ, ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋น„๋™๊ธฐ์ ์ธ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
function fetchData(callback) {
  // ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๋น„๋™๊ธฐ ํ•จ์ˆ˜
  let data = ...
  callback(data);
}

fetchData(function(data) {
  console.log(data);
});
์ฝœ๋ฐฑ(callback)๊ณผ ๋น„๋™๊ธฐ(asynchronous)๋Š” ์„œ๋กœ ๊ด€๋ จ ์žˆ๋Š” ๊ฐœ๋… ์ž…๋‹ˆ๋‹ค. ์ฝœ๋ฐฑ์€ ํ•จ์ˆ˜์˜ ์ธ์ž๋กœ ๋‹ค๋ฅธ ํ•จ์ˆ˜๋ฅผ ๋ฐ›์•„๋“ค์ด๋Š” ํ•จ์ˆ˜๋ฅผ ๋งํ•˜๋ฉฐ, ์ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋น„๋™๊ธฐ์ ์ธ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๋น„๋™๊ธฐ์ ์ธ ์ž‘์—…์€ ์ž‘์—…์ด ์™„๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š๊ณ , ๋‹ค์Œ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์„ ๋งํ•ฉ๋‹ˆ๋‹ค.

ํ•จ์ˆ˜์˜ ํŠน์ง• ์ดํ•ดํ•˜๊ธฐ

์Šค์ฝ”ํ”„

  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ์Šค์ฝ”ํ”„์— ๋”ฐ๋ผ ์ฐธ์กฐํ•˜๋ ค๋Š” ์‹๋ณ„์ž๋ฅผ ์ฐพ์Šต๋‹ˆ๋‹ค.
  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ์Šค์ฝ”ํ”„๋Š” [ํ•จ์ˆ˜ ์Šค์ฝ”ํ”„]์™€ [๋ธ”๋ก ์Šค์ฝ”ํ”„] ๋ฐฉ์‹์œผ๋กœ ๋‚˜๋ˆ„์–ด ์ง€๋ฉฐ,
    ์ด์— ๋”ฐ๋ผ [์ „์—ญ ์Šค์ฝ”ํ”„]์™€ [์ง€์—ญ ์Šค์ฝ”ํ”„]๋กœ ์ฐธ์กฐ ๋ฒ”์œ„๊ฐ€ ๋‹ฌ๋ผ์ง‘๋‹ˆ๋‹ค.

ํ•จ์ˆ˜ ์Šค์ฝ”ํ”„

  • ํ•จ์ˆ˜์—์„œ ์ •์˜ํ•œ ๋ธ”๋ก๋ฌธ๋งŒ ์Šค์ฝ”ํ”„์˜ ์œ ํšจ ๋ฒ”์œ„๋กœ ์ธ์ •
let a = 10; // ์ „์—ญ์Šค์ฝ”ํ”„
function sum7() {
  let a = 20; // ์ง€์—ญ์Šค์ฝ”ํ”„
  console.log(`ํ•จ์ˆ˜ ๋‚ด๋ถ€ : ${a}`); // 20
}
sum7();
console.log(`ํ•จ์ˆ˜ ์™ธ๋ถ€ : ${a}`); // 10

๋ธ”๋ก ์Šค์ฝ”ํ”„

  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ์›๋ž˜ ํ•จ์ˆ˜ ์Šค์ฝ”ํ”„๋กœ ๋”ฐ๋ฅด๋Š” ์–ธ์–ด์˜€์ง€๋งŒ, ES6์—์„œ let, const ํ‚ค์›Œ๋“œ๊ฐ€ ์ถ”๊ฐ€๋˜๋ฉด์„œ ๋ธ”๋ก ์Šค์ฝ”ํ”„๋„ ์ง€์›ํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ๋ธ”๋ก ์Šค์ฝ”ํ”„๋Š” {}๋กœ ๊ตฌ์„ฑ๋œ ๋ธ”๋ก๋ฌธ ๊ธฐ์ค€์œผ๋กœ ์Šค์ฝ”ํ”„์˜ ์œ ํšจ ๋ฒ”์œ„๋ฅผ ๋‚˜๋ˆ„๋Š” ๋ฐฉ์‹ ์ž…๋‹ˆ๋‹ค.
  • ๐Ÿ’ก ๋ธ”๋ก ์Šค์ฝ”ํ”„๋Š” ์˜ค์ง let, const ์นด์›Œ๋“œ์—์„œ๋งŒ ๋ฐœ์ƒํ•˜๋ฏ€๋กœ ๊ฐ™์€ ์ฝ”๋“œ๋ฅผ var ํ‚ค์›Œ๋“œ๋กœ ๋ณ€๊ฒฝํ•˜๋ฉด ์ฐธ์กฐ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

let, const

let b = 1;
{
  let c = 12;
  console.log(`์ฝ”๋“œ ๋ธ”๋ก ๋‚ด๋ถ€ b : ${b}`); // 1
  console.log(`์ฝ”๋“œ ๋ธ”๋ก ๋‚ด๋ถ€ c : ${c}`); // 12
}
console.log(`์ฝ”๋“œ ๋ธ”๋ก ์™ธ๋ถ€ b : ${b}`); // 1
console.log(`์ฝ”๋“œ ๋ธ”๋ก ์™ธ๋ถ€ c : ${c}`); // ์˜ค๋ฅ˜

var

var d = 3;
{
  var e = 15;
  console.log(`์ฝ”๋“œ ๋ธ”๋ก ๋‚ด๋ถ€ d : ${d}`); // 3
  console.log(`์ฝ”๋“œ ๋ธ”๋ก ๋‚ด๋ถ€ e : ${e}`); // 15
}
console.log(`์ฝ”๋“œ ๋ธ”๋ก ์™ธ๋ถ€ d : ${d}`); // 3
console.log(`์ฝ”๋“œ ๋ธ”๋ก ์™ธ๋ถ€ e : ${e}`); // 15 (ํ˜ธ์ด์ŠคํŒ…์— ์˜ํ•ด ์˜ค๋ฅ˜ ์•ˆ๋‚จ..)

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

  • ํ˜ธ์ด์ŠคํŒ…์ด๋ž€ ์ฝ”๋“œ๋ฅผ ์„ ์–ธ๊ณผ ํ• ๋‹น์„ ๋ถ„๋ฆฌํ•ด ์„ ์–ธ๋ถ€๋ฅผ ์ž์‹ ์˜ ์ตœ์ƒ์œ„๋กœ ๋Œ์–ด์˜ฌ๋ฆฌ๋Š” ๊ฒƒ์„ ๋งํ•ฉ๋‹ˆ๋‹ค.
console.log(num);
var num= 10;

ํ˜ธ์ด์ŠคํŒ…์— ์˜ํ•ด์„œ ์•„๋ž˜์˜ ์ฝ”๋“œ์ฒ˜๋Ÿผ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.

var num = 10;
console.log(num);

ํด๋กœ์ €

  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํด๋กœ์ €๋Š” ํ•จ์ˆ˜๊ฐ€ ํ•ด๋‹น ํ•จ์ˆ˜์˜ ์Šค์ฝ”ํ”„ ์™ธ๋ถ€์— ์žˆ๋Š” ๋ณ€์ˆ˜์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๋งค์ปค๋‹ˆ์ฆ˜ ์ž…๋‹ˆ๋‹ค.
  • ์ด๋ฅผ ํ†ตํ•ด ํ•จ์ˆ˜ ๋‚ด๋ถ€์—์„œ ์™ธ๋ถ€ ๋ณ€์ˆ˜๋ฅผ ์ˆ˜์ •ํ•˜๊ฑฐ๋‚˜ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์•„๋ž˜ ์˜ˆ์ œ์—์„œ count ๋ณ€์ˆ˜๋Š” makeCounter ํ•จ์ˆ˜ ๋‚ด์—์„œ ์ •์˜๋˜์ง€๋งŒ, ํด๋กœ์ €๋ฅผ ํ†ตํ•ด counter ํ•จ์ˆ˜์—์„œ๋„ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฐ ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ์ด์šฉํ•˜๋ฉด ๋ณ€์ˆ˜๋ฅผ ์ˆจ๊ธฐ๊ณ  ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ์•ˆ์ „ํ•˜๊ฒŒ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

function makeCounter() {
  let count = 0;
  return function() {
    count++;
    console.log(count);
  };
}

const counter = makeCounter();
counter(); // 1
counter(); // 2
counter(); // 3
profile

GiantStepDEV

@kongmi

ํฌ์ŠคํŒ…์ด ์ข‹์•˜๋‹ค๋ฉด "์ข‹์•„์š”โค๏ธ" ๋˜๋Š” "๊ตฌ๋…๐Ÿ‘๐Ÿป" ํ•ด์ฃผ์„ธ์š”!