function

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

function sayHello() {
  alert('hello');
}
sayHello();

let func = sayHello(); //์ด์ฒ˜๋Ÿผ
fucn(); //๋ณ€์ˆ˜์— ๋Œ€์ž…๋„ ๊ฐ€๋Šฅ

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

js๋Š” ํ•จ์ˆ˜๋ฅผ ํŠน๋ณ„ํ•œ ๋™์ž‘์„ ํ•˜๋Š” ๊ตฌ์กฐ๊ฐ€ ์•„๋‹Œ ํŠน๋ณ„ํ•œ ์ข…๋ฅ˜์˜ ๊ฐ’์œผ๋กœ ์ทจ๊ธ‰

๋”ฐ๋ผ์„œ, ํ•จ์ˆ˜๋ฅผ ๋ณต์‚ฌํ•ด ๋‹ค๋ฅธ ๋ณ€์ˆ˜์— ํ• ๋‹นํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

์•„๋ž˜์ฝ”๋“œ๋ฅผ ๋ณด๋ฉด ํ•จ์ˆ˜์˜ ์ด๋ฆ„์—†์ด ๋ณ€์ˆ˜์— ํ• ๋‹นํ•˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

let sayHello = fucntion(){
    alert( "hello");
}

sayHello();

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

ํ•จ์ˆ˜๋ฅผ ํ•จ์ˆ˜์˜ ์ธ์ž๋กœ ์ „๋‹ฌํ•˜๊ณ , ํ•„์š”ํ• ๋•Œ ์ธ์ˆ˜๋กœ ์ „๋‹ฌํ•œ ๊ทธ ํ•จ์ˆ˜๋ฅผ ๋‚˜์ค‘์— ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ

์•„๋ž˜์˜ ์ฝ”๋“œ๋ฅผ ๋ณด๋ฉด yes์˜ ์ธ์ž๋กœ alert('๋™์˜')๊ฐ€, no์˜ ์ธ์ž๋กœ alert('์ทจ์†Œ')๊ฐ€ ํ• ๋‹น๋˜๋Š” ๊ฒƒ์„ ๋ณผ์ˆ˜ ์žˆ๋‹ค.

function ask(question, yes, no) {
  if (confirm(question)) yes();
  else no();
}

ask(
  '๋™์˜ํ•˜์‹ญ๋‹ˆ๊นŒ?',
  function () {
    alert('๋™์˜ํ•˜์…จ์Šต๋‹ˆ๋‹ค.');
  }, //ํ•จ์ˆ˜ ํ‘œํ˜„์‹
  function () {
    alert('์ทจ์†Œ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด์…จ์Šต๋‹ˆ๋‹ค.');
  } //ํ•จ์ˆ˜ ์ด๋ฆ„ ์—†์ด ์‚ฌ์šฉ
);

ํ•จ์ˆ˜ ํ‘œํ˜„์‹๊ณผ ํ•จ์ˆ˜ ์„ ์–ธ๋ฌธ ์ฐจ์ด

1. js์—”์ง„์ด ํ•จ์ˆ˜๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์‹œ๊ธฐ

ํ•จ์ˆ˜ ํ‘œํ˜„์‹์€ ์‹ค์ œ ์‹คํ–‰ ํ๋ฆ„์ด ๋„๋‹ฌํ–ˆ์„๋•Œ ์ƒ์„ฑํ•˜๊ณ , ํ•จ์ˆ˜ ์„ ์–ธ๋ฌธ์€ ์ •์˜๋˜๊ธฐ์ „์—๋„ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋‹ค. -> ํ•จ์ˆ˜ ์„ ์–ธ์€ ์ „์—ญํ•จ์ˆ˜๋กœ ์„ ์–ธ์ด ๋˜๋ฉฐ, js๋Š” ์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰์ „ ๋ชจ๋“  ์„ ์–ธ๋ฌธ์„ ์ฐพ๊ณ  ์ƒ์„ฑํ›„์— ์‹คํ–‰๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

๊ทธ๋ž˜์„œ, ์•„๋ž˜์™€ ๊ฐ™์ด ์„ ์–ธ๋ฌธ ์ „์— ํ˜ธ์ถœ์„ ํ•ด๋„ ์‹คํ–‰์„ ํ•˜๋ฉด ๋™์ž‘์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

sayHi('John');

function sayHi(name) {
  alert(`Hello, ${name}`);
}

ํ•˜์ง€๋งŒ ํ•จ์ˆ˜ ํ‘œํ˜„์‹์€ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.

์Šค์ฝ”ํ”„

ํ•จ์ˆ˜ ์„ ์–ธ๋ฌธ์€ ํ•จ์ˆ˜๊ฐ€ ์„ ์–ธ๋œ ์ฝ”๋“œ ๋ธ”๋Ÿญ ์•ˆ์—์„œ๋งŒ ์œ ํšจํ•˜๋‹ค.

๋งŒ์•ฝ ๋ฐ˜๋ณต๋ฌธ์ด๋‚˜ if์™€๊ฐ™์ด {}์•ˆ์— ํ•จ์ˆ˜๋ฅผ ์„ ์–ธํ•™๊ณ  ๋ฐ–์—์„œ ํ˜ธ์ถœํ•  ์‹œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

if (true) {
  function welcome() {
    alert('์•ˆ๋…•!');
  }
}

welcome(); // Error: welcome is not defined

์œ„์™€ ๊ฐ™์ด ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ํ•จ์ˆ˜ ํ‘œํ˜„์‹์„ ์‚ฌ์šฉ.

let welcome;
if(true){
    welcome = fuction(){
        alert("์•ˆ๋…•!");
    }
}

welcome(); //์•ˆ๋…•!

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

ํ•จ์ˆ˜ ํ‘œํ˜„์‹๋ณด๋‹ค ๋‹จ์ˆœํ•˜๊ณ  ๊ฐ„๊ฒฐํ•œ ๋ฌธ๋ฒ•์œผ๋กœ ํ•จ์ˆ˜๋ฅผ ์ƒ์„ฑ.

์ปจํƒ์ŠคํŠธ๊ฐ€ ์žˆ๋Š” ๊ธด์ฝ”๋“œ๋ณด๋‹ค ์ž์ฒด ์ปจํ…์ŠคํŠธ๊ฐ€ ์—†๋Š” ์งง์€ ์ฝ”๋“œ๋ฅผ ๋‹ด์„ ์šฉ๋„

let sum = function (a, b) {
  return a + b;
};
let sum = (a, b) => a + b;

์ธ์ˆ˜๊ฐ€ ํ•˜๋‚˜๋ฐ–์— ์—†๋‹ค๋ฉด ๊ด„ํ˜ธ๋ฅผ ์ƒ๋žต ๊ฐ€๋Šฅํ•˜๊ณ , ์ธ์ˆ˜๊ฐ€ ์—†์„๋• ๊ด„ํ˜ธ ์ƒ๋žต ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.

let sum = (a) => a;

let sum2 = () => 1;

ํ•จ์ˆ˜ ๋‚ด์šฉ์ด ์—ฌ๋Ÿฌ์ค„์ผ๋•Œ๋Š” ์ค‘๊ด„ํ˜ธ๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ฌถ์–ด์ค€๋‹ค.

let sum = (a, b) => {
  let sum = a + b;
  return a + b;
};

ํŠน์ง•

  • this๊ฐ€ ์—†๊ธฐ๋•Œ๋ฌธ์— ์‚ฌ์šฉ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค. this๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ์™ธ๋ถ€์—์„œ ๊ฐ’์„ ๊ฐ€์ ธ์˜จ๋‹ค. this๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— new์™€ ํ•จ๊ป˜ ์‚ฌ์šฉ์ด ๋ถˆ๊ฐ€๋Šฅํ•ด ์ƒ์„ฑ์ž ํ•จ์ˆ˜๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค.

    this๊ฐ€ ์—†๊ธฐ๋•Œ๋ฌธ์— arr.forEach()๋‚˜ setTimeout()๊ณผ ๊ฐ™์€ ํ•จ์ˆ˜๋‚ด์—์„œ ํ˜„์žฌ ์ปจํ…์ŠคํŠธ๋ฅผ ์žƒ์ง€ ์•Š๊ณ  ์ž‘์—…์ด ๊ฐ€๋Šฅํ•˜๋‹ค. (forEach๋Š” ๋ฐฐ์—ด arr์˜ ์š”์†Œ ๋Œ€์ƒ์œผ๋กœ ์‹คํ–‰์ด ๊ฐ€๋Šฅํ•˜๊ณ  setTimeout์€ ๋‚ด์žฅ ์Šค์ผ€์ค„๋Ÿฌ๋ฅผ ๋Œ€์ƒ์œผ๋กœ ์‹คํ–‰)

  • ์œ ์‚ฌ ๋ฐฐ์—ด ๊ฐ์ฒด์ธ arguments๊ฐ€ ์—†๋‹ค.

    ๋•Œ๋ฌธ์— this๊ฐ’๊ณผ arguments๊ฐ’์„ ํ•จ๊ป˜ ์‹ค์–ด ํ˜ธ์ถœ์„ ํฌ์›Œ๋”ฉํ•ด์ฃผ๋Š” ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ๋ฅผ ๋งŒ๋“ค๋•Œ ์œ ์šฉํ•˜๋‹ค.

unction defer(f, ms) {
  return function() {
    setTimeout(() => f.apply(this, arguments), ms)
  };
}

function sayHi(who) {
  alert('์•ˆ๋…•, ' + who);
}

let sayHiDeferred = defer(sayHi, 2000);
sayHiDeferred("์ฒ ์ˆ˜"); // 2์ดˆ ํ›„ "์•ˆ๋…•, ์ฒ ์ˆ˜"๊ฐ€ ์ถœ๋ ฅ๋ฉ๋‹ˆ๋‹ค.

์œ„์™€ ๊ฐ™์€ ์ฝ”๋“œ๋ฅผ ์ด์šฉํ•˜๋ ค๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด args์™€ ctx๋ฅผ ๋ฐ˜๋“œ์‹œ ์ƒ์„ฑํ•ด์ค˜์•ผํ•œ๋‹ค.

function defer(f, ms) {
  return function (...args) {
    let ctx = this;
    setTimeout(function () {
      return f.apply(ctx, args);
    }, ms);
  };
}

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

์‹ค์ œ ํ•จ์ˆ˜์˜ ๋งค๊ฐœ๋ณ€์ˆ˜ ์ธ์ž๋Š” 2๊ฐœ๋กœ ์„ ์–ธ์„ ํ–ˆ์–ด๋„, ํ˜ธ์ถœ ์‹œ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์—ฌ๋Ÿฌ๊ฐœ ๋„ฃ์–ด์ฃผ์–ด๋„ ์—๋Ÿฌ๊ฐ€ ๋‚˜์ง€ ์•Š๋Š”๋‹ค.

function sum(a, b) {
  return a + b;
}

alert(sum(1, 2, 3, 4, 5)); //3

arguments๋ผ๋Š” ํŠน์ˆ˜ํ•œ ์œ ์‚ฌ ๋ฐฐ์—ด ๊ฐ์ฒด๊ฐ€ ์กด์žฌํ•ด ์ด๋ฅผ ์ด์šฉํ•ด ๋ชจ๋“  ์ธ์ˆ˜๋ฅผ ์ ‘๊ทผ๊ฐ€๋Šฅํ•˜๋‚˜ ํ™”์‚ดํ‘œ ํ•จ์ˆ˜์—๋Š” arguments๊ฐ€ ์—†๋‹ค.

function hello() {
  alert(arguments.length);
  alert(arguments[0]);
}

hello('hi', 'hello'); // 2, hi
  • spread ๋ฌธ๋ฒ• :

    ํ•จ์ˆ˜์— ๋ฐฐ์—ด์˜ ์š”์†Œ๋ฅผ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์—ฌ๋Ÿฌ๊ฐœ๋ฅผ ์ž…๋ ฅํ• ๋•Œ, ์ผ์ผํžˆ ์ˆ˜๋™์ž…๋ ฅ์ด ์•„๋‹Œ ์ž๋™์œผ๋กœ ์ž…๋ ฅํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ๋ฌธ๋ฒ•

    ๋ง๊ทธ๋Œ€๋กœ array๋ฅผ ์ „๊ฐœ์‹œ์ผœ์ฃผ๋Š” ๋ฌธ๋ฒ•์œผ๋กœ ๋ฐฐ์—ด์•ž์— ...์„ ๋ถ™์—ฌ์ฃผ๋ฉด๋œ๋‹ค.

    let arr = [3, 5, 1];
    alert(Math.max(...arr)); //  5

    ๋ฐฐ์—ด๋ฟ๋งŒ์ด ์•„๋‹ˆ๋ผ ์ดํ„ฐ๋Ÿฌ๋ธ” ๊ฐ์ฒด๋ผ๋ฉด ๋ชจ๋‘ ์‚ฌ์šฉ๊ฐ€๋Šฅํ•˜๋‹ค.

    let str = 'hello';
    alert([...str]); //h,e,l,l,o

    ์ด๋Š” ๋ฌธ๋ฒ• ๋‚ด๋ถ€์—์„œ iterator๋ฅผ ์‚ฌ์šฉํ•ด ์š”์†Œ๋ฅผ ์ˆ˜์ง‘ํ•ด ๊ฐ๊ฐ์˜ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜์—ฌ []๋กœ ๊ฐ์‹ธ ๋ฌธ์ž ๋ชฉ๋ก๋“ค์„ ๋ฐฐ์—ด๋กœ ๋งŒ๋“ค์–ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ถœ๋ ฅ๊ฒฐ๊ณผ๋ฅผ ๋ณด์ธ๋‹ค.

    ๋”ฐ๋ผ์„œ [...obj]์„ ์ด์šฉํ•ด ๋ฐฐ์—ด์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์ง€๋งŒ Array.from(obj)์™€ ๋น„๊ตํ•ด์„œ [...obj]๋Š” ์œ ์‚ฌ ๋ฐฐ์—ด ๊ฐ์ฒด์—๋Š” ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ์–ด ๋ฌด์–ธ๊ฐ€๋ฅผ ๋ฐฐ์—ด๋กœ ๋งŒ๋“ค๋•Œ๋Š” Array.from()์„ ์ด์šฉํ•œ๋‹ค.

Last updated