본문 바로가기

블록체인 sw개발자

[JS] 함수

함수

프로그래밍에서의 함수란, 큰 프로그램을 잘게 쪼개어 특정 코드 뭉치를 반복해서 사용할 수 있도록 묶어놓은 코드 뭉치의 단위를 말합니다. 함수를 어떻게 작성하느냐에 따라서 코드의 유지보수성과 가독성이 크게 달라집니다. 또 JavaScript의 함수는 굉장히 많은 기능을 갖고 있는데, 사실 함수의 성질을 모두 이해하면 프로그래밍 언어로서의 JavaScript를 전부 이해한거나 마찬가지라고 할 수 있을 정도입니다. 본 챕터에서는 함수의 기본적인 성질만을 다루고, 이어지는 챕터들에서 나머지 내용을 차근차근 다룰 것입니다.

 

함수의 구성 요소


두 값을 더하는 아주 간단한 함수를 정의해 보겠습니다.

function add(x, y) {
const result = x + y;
return result;
}

위에서 add라는 이름을 갖는 함수를 정의했습니다. 괄호 안의 x와 y를 매개변수(parameter)라 하며 , return 뒤에 오는 값을 반환(return value)이라고 합니다.

 

함수를 정의했다면, 아래와 같이 함수 이름 뒤에 괄호를 붙여서 이 함수를 실행시킬 수 있습니다. 이를 함수의 호출(function call) 이라고 합니다.

add(2, 3); //5

여기서 괄호 안에 넘겨준 2, 3을 인수 (argument)라고 부릅니다.

 

실행 순서

 

JavaScript는 기본적으로는 쓰여진 순서대로 실행되지만, 여러 가지 예외가 존재해서 코드의 실행 순서가 이리저리 옮겨다니기도 합니다. 함수 호출도 그 중 하나로 , 함수 호출 코드를 만나면 코드의 실행 흐름이 호출된 함수의 내부로 옮겨갑니다. 함수가 값을 반환하면 다시 이전 위치부터 코드의 실행이 재개됩니다.

//1 - 함수 정의
function add(x, y) {
  return x + yl // 3-함수 실행
  }
  //2 - 함수 호출
  const result = add(2, 3);
  //4 - 나머지 코드 실행
  consol.log(result);

여기서 주의할 점은, 함수를 정의하는 것만으로는 함수 내부에 있는 코드가 실행되지 않는다는 것입니다, 함수 내부의 코드를 실행하려면, 반드시 함수를 호출해주어야 합니다.

 

매개변수와 인수

 

위 코드의 xy를 가지고 매개변수라고 합니다. 변수의 일종으로, 함수 호출 시마다 인수가 매개변수에 대입됩니다. 위의 코드에서 add(2, 3) 과 같이 호출하면 매개변수 x에는 2가, y에는 3이 대입된 채로 나머지 코드가 실행됩니다.

 

여기서 주의할 점은 매개변수는 바깥에서 선언된 변수와는 관계없는 독립적인 변수라는 것입니다. 예를 들어, 함수 호출 시 인수가 들어갈 자리에 변수를 써주고, 함수 내부에서 매개변수에 새로운 값을 대입한다고 하더라도 인수로 써준 변수의 값이 변경 되지 않습니다.

 

function reassign(x) {
x=2;
return x;
}

const y = 1;
const result = reassign(y);

console.log(y); //1
cinsole.log(result); //2

매개변수는 let으로 선언한 변수와 비슷하게 동작하지만 미묘하게 다른 점이 있습니다.

 

반환값

 

return 구문은 함수의 반환값을 결정합니다. return 키워드 바로 다음에 오는 값이 함수 호출의 결과값으로 반환되며, 반환되는 즉시 함수 실행이 끝납니다.

 

function add(xm y) {
return x + y;
consol.log('이 부분은 실행되지 않습니다.');
}
add(1, 2); //3
// 3외에 따로 출력 되는 내용이 없다.

여기서 유의할 점은, 함수를 정의하는 것만으로는 함수 내부에 있는 코드가 실행되지 않는다는 것입니다. 함수 내부의 코드를 실행하려면, 반드기 함수를 호출해주어야 합니다.

 

 

 

 

'블록체인 sw개발자' 카테고리의 다른 글

[JS] scope  (0) 2023.07.05
[JS] for 문  (0) 2023.07.04
[JS] while, 구구단 만들기  (0) 2023.06.29
[JS] 배열함수  (0) 2023.06.28
[JS] 호이스팅 var, let의 차이  (0) 2023.06.27