๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
javascript๐Ÿช“/์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ณต๋ถ€

function ์ด๋ž€?

by hyojinny 2023. 9. 5.
function? -ํ”„๋กœ๊ทธ๋žจ์„ ํ•˜๋Š” ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ building block
-subprogram ์ด๋ผ๊ณ  ๋ถˆ๋ฆฌ๋ฉฐ ์žฌ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค
-ํ•œ๊ฐ€์ง€์˜ ์ž‘์—…์ด๋‚˜ ์–ด๋–ค๊ฐ’(value)์„ ๊ณ„์‚ฐํ•˜๊ธฐ ์œ„ํ•ด ์“ฐ์ž„
์‚ฌ์šฉ๋ฒ• function ํ•จ์ˆ˜์ด๋ฆ„(ํŒŒ๋ผ๋ฏธํ„ฐ1, ํŒŒ๋ผ๋ฏธํ„ฐ2) {
๋‚ด์šฉ
}
๋ฆฌํ„ด;

ํ•˜๋‚˜์˜ function์€ === ํ•œ๊ฐ€์ง€์ผ๋งŒ ํ•œ๋‹ค.
ํ•จ์ˆ˜์ด๋ฆ„ ์ž‘์„ฑ๋ฒ• ๋ณ€์ˆ˜๋Š” ๋ช…์‚ฌ๋กœ
ํ•จ์ˆ˜๋Š” ๋™์‚ฌ๋กœ (doSomething)

ํ•จ์ˆ˜๋Š” object ์ด๋‹ค.  1. ๋ณ€์ˆ˜์— ํ• ๋‹น์ด
2. function ์— ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ์ „๋‹ฌ
3. ๋ฆฌํ„ด๊ฐ’์œผ๋กœ๋„ ๋ฆฌํ„ด

 

1. function

function ์œผ๋กœ printHelloํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค๊ณ  ๊ทธ ํ•จ์ˆ˜๋ฅผ ๋ฆฌํ„ดํ•œ๋‹ค. 

function printHello() {
  console.log('hello');
}
printHello();

2. parameters > function์— ์ „๋‹ฌ๋˜๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ

 

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ํƒ€์ž…์„ ๋ณด์ง€ ์•Š์•„ ๋ฌธ์ž์—ด์ด๋˜ ์ˆซ์ž์—ด์ด๋˜ ๊ฐ™์ด ์ถœ๋ ฅํ•œ๋‹ค. 

ํ•˜์ง€๋งŒ ๋‹ค๋ฅธ์–ธ์–ด์—์„  ์ •ํ™•ํ•œ ํƒ€์ž…์„ ์ ๋Š”๊ฒƒ์ด ์ข‹๋‹ค. 

 

function ์œผ๋กœ log ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด message ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ํ˜ธ์ถœ

// function log(message: string) > ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ๋ฒ„์ „
function log(message) {
  console.log(message);
}
log('hello');
log(1234);

 

ํŒŒ๋ผ๋ฏธํ„ฐ ์‘์šฉ

 

ํŒŒ๋ผ๋ฏธํ„ฐ๋Š” ๊ฐ’์ด ๋ฉ”๋ชจ๋ฆฌ์— ์ „๋‹ฌ vs ์˜ค๋ธŒ์ ํŠธ ๋ฉ”๋ชจ๋ฆฌ์— ๋ž˜ํผ๋Ÿฐ์Šค๊ฐ€ ์ „๋‹ฌ

 

function changeName(obj) {
  obj.name = 'coder';
}
//์ „๋‹ฌ๋œ ์˜ค๋ธŒ์ ํŠธ์˜ ์ด๋ฆ„์„ coder๋กœ ๋ณ€๊ฒฝํ•ด๋ผ

const ellie = { name: 'ellie' }; // const๋กœ ๋ณ€์ˆ˜ ellie ๋ฅผ ์ •์˜ 
changeName(ellie); //๋ฆฌํ„ด
console.log(ellie);

 ์„ ์–ธ๋œ function ํ•จ์ˆ˜ changeName์˜ ํŒŒ๋ผ๋ฏธํ„ฐ obj์˜ name ์€

 prototype ์ด object ์ด๋‹ค.

 

 

const ๋กœ ellie๋ฅผ ์ •์˜ํ•ด์คŒ > ์ด๋•Œ ๋ฉ”๋ชจ๋ฆฌ์—” name์˜ค๋ธŒ์ ํŠธ์˜ ๋ž˜ํผ๋Ÿฐ์Šค์ธ ellie๊ฐ€ ์ €์žฅ๋จ
ํ•จ์ˆ˜์•ˆ์—์„œ ๋ž˜ํผ๋Ÿฐ์Šค๊ฐ€ ์ €์žฅ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋ณ€๊ฒฝ๋œ ๊ฐ’์ด ์ถœ๋ ฅ

 


3. Default parameters > ๊ธฐ๋ณธ ๋งค๊ฐœ๋ณ€์ˆ˜(ํŒŒ๋ผ๋ฏธํ„ฐ)

default parameter์€ ํ•จ์ˆ˜์— ์ „๋‹ฌ๋œ ํŒŒ๋ผ๋ฏธํ„ฐ์˜ ๊ฐ’์ด undefined์ด๊ฑฐ๋‚˜ ์ „๋‹ฌ๋œ ๊ฐ’์ด ์—†์„ ๋•Œ, ์ดˆ๊ธฐํ™” ์„ค์ •๋œ ๊ฐ’.

 

๊ฐ„๋‹จํ•œ ๋ฐฉ๋ฒ•

function showMessage(message, from = 'unknown') {
  console.log(`${message} by ${from}`);
}
showMessage('hi');


//hi by unknown ์ถœ๋ ฅ

๋งŒ์•ฝ ๋งค๊ฐœ๋ณ€์ˆ˜ from ์— ๊ฐ’์ด ์—†๋‹ค๋ฉด unknown ์œผ๋กœ ์ฒ˜๋ฆฌ

 

 

๋ณต์žกํ•œ ๋ฐฉ๋ฒ•

//์œ„์˜ ์ฝ”๋“œ๋ฅผ ํ’€์–ด์“ฐ๋ฉด ์ด๋ ‡๋‹ค. 
function showMessage(message, from) {
  if (from === undefined) {
    from = 'unknown';
  }
  console.log(`${message} by ${from}`);
}
showMessage('hi');

 


4. resr parameters > ... ์‚ฌ์šฉ์‹œ ๋ฐฐ์—ดํ˜•ํƒœ๋กœ ์ „ํ™˜

function printAll(...args) {
  for (let i = 0; i < args.length; i++) {
    console.log(args[i]);
  }

  //๊ฐ„๋‹จํ•œ๋ฐฉ๋ฒ•
  for (const arg of args) {
    console.log(arg);
  }

  //๋” ๊ฐ„๋‹จํ•œ ๋ฐฉ๋ฒ•
  args.forEach((arg) => console.log(arg));
}
printAll('park', 'hyo', 'jin');
//์ธ์ž 3๊ฐœ ์ „๋‹ฌ
//...args ๋กœ  ์ธ์ž๊ฐ’ park hyo jin ์„ ๋ฐฐ์—ด๊ฐœ์ˆ˜ ๋งŒํผ ๋ฃจํ”„๋กœ ์ถœ๋ ฅ

 

 

 

 

 


5. Local scope > ๋ฐ–์—์„œ๋Š” ์•ˆ์ด ๋ณด์ด์ง€ ์•Š๊ณ  ์•ˆ์—์„œ๋งŒ ๋ฐ–์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. 

let globalMessage = 'global'; //global variable ์ „์—ญ๋ณ€์ˆ˜
function printMessage() {
  let message = '์ง€์—ญ๋ณ€์ˆ˜';
  console.log(message); // local variable ์ง€์—ญ๋ณ€์ˆ˜
  console.log(globalMessage); //๋ถ€๋ชจ๋ณ€์ˆ˜๋„ ์•ˆ์—์„œ ํ˜ธ์ถœ๊ฐ€๋Šฅ

  function printAnother() {
    console.log(message);
    let childMessage = 'ํ•จ์ˆ˜์•ˆ์˜ํ•จ์ˆ˜';
    console.log(childMessage);
  }
  printAnother();
  // console.log(childMessage); ๋ถ€๋ชจ๋ณ€์ˆ˜๋Š” ์ž์‹์—์„œ ๋ถˆ๋Ÿฌ์˜ฌ์ˆ˜ ์žˆ์œผ๋‚˜, ์•ˆ์— ์ž‘์„ฑ๋œ ๋ณ€์ˆ˜๋Š” ๋ฐ–์—์„œ ํ˜ธ์ถœ ๋ชปํ•จํ•จ
}
printMessage();

6. Return a value 

function sum(a, b) {
  return a + b;
}
const result = sum(1, 2);
console.log(`sum: ${sum(1, 2)}`);

7. ๋นจ๋ฆฌ ๋ฆฌํ„ดํ•˜๊ณ  ๋นจ๋ฆฌ ๋‹ซ๊ธฐ

function upgradeUser(user) {
  if (user.point > 10) {
    //์กฐ๊ฑด์ด ์•„๋‹์‹œ ๋‹ค์Œํ•จ์ˆ˜๋กœ ์ง„ํ–‰ > ํ•จ์ˆ˜๊ฐ€ ๋ธ”๋Ÿญ์•ˆ์—์„œ ์ž‘์„ฑ๋˜๋ฉด ๊ฐ€๋…์„ฑ์ด ๋–จ์–ด์ง
  }
  function upgradeUser(user) {
    if (user.point <= 10) {
      return;
    } // ์กฐ๊ฑด์ด ๋งž์ง€์•Š์„๋•Œ ๋ฆฌํ„ด์œผ๋กœ ํ•จ์ˆ˜ ์ข…๋ฃŒํ•˜๊ณ  ๋งž์„๋•Œ ๋‹ค์Œ๋กœ์ง ์‹คํ–‰
  }
}

๋Œ“๊ธ€