JavaScript 1.함수(function) — 정의와 호출(1)

Myong Hyo You
4 min readJul 7, 2020

함수란 일단 한 번 정의되면 임의 횟수에 걸쳐서 호출되거나 실행될 수 있는 자바스크립트 코드 블록이다. 함수는 전달 인자라 불리는 지역 변수를 가질 수 있으며 이러한 인자들을 사용하여 반환값을 계산한다. 반환값은 함수 호출 표현식의 결과값이 된다. 객체 상에서 호출되는 함수는 ‘메서드’라 칭하며 이때 객체는 함수의 암묵적 전달인자(implicit argument)로 전달된다.

암묵적 전달인자로 전달되는 객체 = ‘this’

함수를 정의하는 가장 일반적인 방법은 function문을 사용하는 것이다. 이 방법은 function 키워드로 시작하여 다음과 같은 항목들이 따라온다.

  • 함수의 이름
  • 괄호 () 안에 0개 혹은 임의 개수의 매개변수 이름을 쉼표로 분리한 목록
  • 중괄호 {} 안에 함수의 몸체를 구성하는 자바스크립트 문장들

아래의 코드들은 몇몇 함수들의 정의를 보여 준다.

예시 1// 이 함수에는 return 문이 없다. 따라서 undefined 값을 반환한다.
function print(msg) {
document.write(msg, “<br>”)
}
// 두 점 사이의 거리를 계산하여 반환하는 함수
function distance(x1, y1, x2, y2){
var dx = x2 - x1;
var dy = y2 - y1;
return math.sqrt(dx*dx + dy*dy);
}
// 팩토리얼 값(x!)을 계산하는 재귀 함수(자기 자신을 호출하는 함수)
function factorial(x) {
if(x <= 1)
return 1;
return x * factorial(x-1);
}

함수는 임의 개수의 전달인자를 가질 수 있으며 return 문을 반드시 사용할 필요는 없다. return 문은 함수의 실행을 멈추고 return 문에 주어진 표현식의 결과값을 함수의 호출자에게 전달하는 역할을 한다. 만약 return 문에 연결된 표현식이 없거나 return문이 없으면 함수 몸체를 이루는 문장들을 하나씩 실행한 뒤에 undefined 값을 호출자에게 반환한다.

한 번 정의된 함수는 () 연산자와 함께 호출한다. 함수의 이름 뒤에는 괄호가 따라오며 이 괄호 안에는 선택적으로 전달인자 값을 쉼표로 분리하여 연결한 목록이 위치한다. 예시1에서 정의한 함수들은 다음과 같은 코드를 사용하여 호출할 수 있다.

print (“Hello, ” + name);
print("Welcome to my blog!");
total_dist = distance(0,0,2,1) + distance(2,1,3,5);
print("The probability of that is : " + factorial(5)/factorial(13));

함수를 호출할 때 괄호 사이에 명시한 각 표현식은 일단 평가된 후 그 결과값이 함수의 전달인자로써 사용된다. 일반적으로 매개변수는 실행되는 함수의 몸체 안에서만 유효하며 함수의 밖에서 또는 함수가 반환한 후에는 접근할 수 없음을 유의해야 한다.

JavaScript는 데이터 타입 제약이 느슨한 언어이기 때문에 함수 매개변수의 데이터 타입을 명시하지 않는다. 그러나 만약 전달인자의 데이터 타입이 중요하다면 typeof 연산자를 사용하여 직접 테스트할 수 있다.

예시 2 : typeofconsole.log(typeof 1);
// expected output : 'number'
console.log(typeof 'num');
// expected output : 'string'
console.log(typeof true)
// expected output : 'boolean'
console.log(typeof undeclaredVariable);
// expected output : 'undefined'

자바스크립트는 정확한 개수의 전달인자를 전달하는지도 검사하지 않는다. 만약 함수가 기대하는 개수보다 많은 수의 전달인자를 전달하면 함수는 이런 추가분의 전달인자들을 무시한다. 만약 함수가 기대하는 개수보다 적은 수의 전달인자를 전달하면 빠뜨린 매개변수에는 undefined 값이 할당된다.

기대 갯수보다 더 많은 전달인자 = 초과분의 전달인자 무시
기대 갯수보다 더 적은 전달인자 = 빠뜨린 매개변수 undefined 할당

예시 1에서 정의한 print() 함수는 return문이 없기에 항상 undefined 값을 반환한다. 따라서 이 함수를 보다 큰 표현식의 일부로 사용하는 것은 무의미하다. 반면에 distance()와 factorial() 함수는 예에서 보인 것과 같이 더 큰 표현식의 일부로 호출이 가능하다.

--

--