[JS] function

박영준·2020년 9월 19일
0

Javascript 기초

목록 보기
3/7

Function(함수)

  • 프로그램을 구성하는 기본적인 빌딩 블록
  • subprogram이라 불리며, 여러번 재사용이 가능하다.
  • 대체로 한가지의 일이나 어떠한 값을 계산하기 위해 쓰인다.

1. function declaration (함수 선언)

기초 문법

function name(param1, param2) {
body...
return;
}
  • 하나의 함수는 한가지의 일만 하도록 만든다.
  • 변수이름을 지정할땐 명사로 지정했지만, 함수는 동사로 지정한다.
  • createCardAndPoint -> createCard, createPoint
  • 함수는 자바스크립트에서 object이다.

아래 함수는 쓸모가 없다.

function printHello() {
	console.log('hello');
}
printHello(); // hello 함수 호출

message라는 parameter를 지정해줌.
log('hello')안에 hello라는 문자열이 함수선언 부분에서 message라는 parameter로 전달이 되고 함수 내부에서는 message가 hello라는 값을 가진 변수처럼 활용이 되서 hello라는 값이 출력이 되는 것

function log(message) { //message->parameter
	console.log(message);
}
log('hello'); // hello

2. parameters (매개변수) & argument(인자)

parameter

  • primitive parameters: passed by value / 메모리에 value가 저장되어 있음.
  • obejct parameters: passed by reference / 메모리에 reference가 저장되어 있음.
function changeName(obj) {
	obj.name = 'coder'
}
const yj = { name: 'yj' };
changeName(yj);
console.log(yj);// name: ' yj'

changeName이라는 함수는 전달된 obj의 이름을 'coder'로 무조건 변환하는 함수이다.
yj라는 const를 정의한 다음 yj라는 object를 만들어서 할당해주면 메모리에는 이 object가 만들어진 reference가 메모리에 들어가게 되고 이 reference는 이 object를 메모리 어딘가 가르키고 있다.

argument

function changeName(username) {
	return `${username}`
}

console.log(changeName('영준')) //영준님

위에 '영준'과 같이 실직적으로 들어가는 값을 argument(인자)라고 한다.

parameter의 유무에 대해 if문을 먹일때

3. Default parameters

from이 정의되어 있지 않음.

function showMessage(message, from) {
	console.log(`${message} by ${from}`);
}
showMessage('HI!') // HI! by undefined / from이 정의되어 있지 않음.

'unknown'이라는 default 값을 지정해줬다.
from에 값을 지정해주지 않았지만 unknown이라고 출력되는걸 볼 수 있다.

function showMessage(message, from = 'unknown') { // default 지정
	console.log(`${message} by ${from}`);
}
showMessage('HI!') // HI! by unknown 

4. Rest parameters

parameter앞에 ...을 붙이면 rest parameter이다.
이것은 바로 배열 형태로 전달이 된다.

function printAll(...args) {
  for (let i = 0; i < args.length; i++) {
	console.log(args[i]);
  }
}
printAll('a', 'b', 'c'); // a, b, c

5. Local scope(지역변수)

밖에서는 안이 보이지 않고 안에서만 밖을 볼 수 있다.
지역변수를 블록 밖에서 호출하면 에러가 발생한다.

let globalMessage = 'global'; //global variable
function printMessage() {
  let message = 'hello' // local variable
  console.log(message); // hello
  console.log(globalMessage); // global
}
printMessage();

6. Return

함수에서는 parameter들을 전달받아서 계산된 값을 return할 수 있다.
return이 없는 함수들은 return undefined;와 같다. return은 생략 가능하다.

return이 실행된 뒤에는 그 지점에서함수가 종료된다.
return을 사용하고 함수를 호출하기만 하면 return값으로 parameter가 대체되기만 하지 아무값도 출력되지 않는다.

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

Function expression (함수 표현식)

  • 함수는 다른 변수와 같은 취급을 받는다.
  • 변수에 할당이 가능하다.
  • 함수의 parameter로 전달이 된다.
  • return값으로 return이 된다.

1. Function expression (함수 표현식)

function declarationfunction expression의 가장 큰 차이점은 hoist다.
function declaration은 hoisting이 된다.
함수가 선언되기 이전에 호출해도 출력이된다.

const print = function () { // anonymous function
  console.log('print');
};
print();
const printAgiain = print;
printAgiain();
const sumAgain = sum;
console.log(sumAgain(1, 3));

2. callback function using function expression

randomQuiz라는 함수를 보면 answer와 정답이 맞으면 부르게 될 함수printYes와 정답이 틀리면 부르게 될 함수printNo printYes,printNo 이 두 함수를 전달해주게 되는데 이렇게 함수를 전달해서 상황이 맞으면 이 두가지 함수를 부르는걸 callback 함수라고 한다.

function randomQuiz(answer, printYes, printNo) {
  if (answer === 'love you') {
    printYes();
  } else {
    printNo();
  }
}
const printYes = function () {
  console.log('yes!');
};

const printNo = function print() {
  console.log('no!');
};

randomQuiz('a', printYes, printNo); // no!
randomQuiz('love you', printYes, printNo); // yes!

3. Arrow Function

항상 이름이 없는 anonymous function이다.

const simplePrint = function () {
  console.log('simplePrint!')
};

const simplePrint = () => console.log('simplePrint!');
// 위와 아래는 동일하다.

----------------------------------------------------------------

const add = (a, b) => a + b;

const add = function (a, b) {
return a + b;
};
// 위와 아래는 동일하다.

----------------------------------------------------------------

const simpleMultiply = (a, b) => {
  //do something more
  return a * b;
}; // 함수안에서 좀 더 다양한 일을 하기 위해 블록이 필요하다면 블록을 넣을 수 있다. 
// 그러나 블록을 사용한다면 return을 사용해야한다!!!
profile
React, React-Native Developer

0개의 댓글