본문 바로가기

JavaScript/Basic-Javascript

자바스크립트 정리하며 배우기[15] - 함수(function) 생성방법 3가지

안녕하세요. Tay 입니다.

개발하면서 가장 중요한 함수에 대해서 설명하겠습니다.

 

 

함수

일급 객체이며, 특정 기능을 제공하기위해 작성된 코드들을 정의 한 것

 

함수 생성 방법 3가지

  • 함수 선언문 function statement
  • 함수 표현식 function expression
  • Function( ) 생성자 함수

함수 선언문이나 표현식 방법은 함수 리터럴 방식을 통해서 함수를 생성한다.

 

 

함수 리터럴

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

리터럴은 값 자체를 의미하지만, 함수에서 리터럴은 데이터 표기 방식으로 볼 수 있다. (=리터럴 표기법)

 

위의 함수 생성방법 3가지로 여러 함수를 만들면서 배워보도록 하겠다.

 

1) index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
    <script src="function.js"></script>
</body>
</html>

 

 

함수 선언문 방식

반드시 함수명이 정의되어있어야 한다.

 

2) function.js

function add

// function statement
function add(x, y) {
  return x + y;
}

console.log(add(5, 2));

 

  • add 는 함수 선언문 방식으로 생성된 함수이다.
  • 함수명이 반드시 존재하며, console 에서 add 로 호출하고있다.

 

함수 표현식 방식 - 익명 함수(anonymous)

생성한 함수를 변수에 할당하여서 함수를 생성하는 방식

함수 명은 선택사항이며, 함수 명이 없는 경우 익명 함수 라고 한다.

 

- function.js

function sub , minus

// function expression (anonymous)
let sub = function(x, y) {
  return x - y;
};

var minus = sub;

console.log(sub(5, 2));
console.log(minus(5, 2));

sub 변수에 function 을 생성하여 할당했다. 이때 sub 변수는 생성한 함수를 참조한다.

이러한 방식을 함수 표현식 방식으로 함수 생성한다 라고 하며, 함수가 할당된 변수를 함수 변수라고 한다.

 

결과 :

add , sub , minus 결과

  • 위 예제들의 결과값이다. 위에서 아래 순서대로 add , sub , minus 의 결과다.
  • 함수 표현식으로 생성된 함수를 호출하려면 함수 변수를 사용해야한다. sub(5, 2)
  • 함수 변수 sub 은 함수의 참조값을 가지므로 또 다른 변수 minus 에 그 값을 그대로 할당할 수 있다.
    그러하여 sub 과 minus 은 같은 코드를 수행한다.

 

 

함수 표현식 방식 - 기명 함수(named)

함수 이름이 포함된 함수 표현식

 

- function.js

named

// function expression (named)
var add = function sum(x, y) {
  return x + y;
};

console.log(add(5, 2));
console.log(sum(5, 2));

add 라는 함수 변수에 sum 함수를 할당하고, add 와 sum 을 이용하여 콘솔에 실행해봤다.

 

 

결과 :

add , sum result

add는 정상적으로 작동하고, sum is not defined 이다.

 

이유 : 함수 표현식에서 사용된 함수 이름이 외부에서 접근 불가능하기 때문이다.

 

※ 함수 표현식에서 사용된 함수 이름은 함수 내부에서 재귀호출이나 디버거 등이 함수를 구분할때 사용

 

 

기명 함수의 활용 예시 :

재귀함수 factorial

var factorialVar = function factorial(n) {
  if (n <= 1) {
    return 1;
  }
  return n * factorial(n - 1);
};

console.log(factorialVar(3));
console.log(factorial(3));

factorial 함수안에 factorial 함수를 재귀적으로 호출했다.

콘솔 1번과 2번의 결과를 확인해보자.

 

결과 :

factorial result

  • 로그 1번은 factorialVar 함수 변수를 통해서 실행한 결과
  • 로그 2번은 factorial 함수를 호출하여 실행한 결과

 

중요!

※ 실제로 기명함수의 함수내에서 재귀적인 호출은 가능하나 외부에서 호출은 불가능한 것을 확인했다.

 

함수 선언문으로 생성된 함수는 자바스크립트 엔진이 자동으로 함수 이름과 같은 함수 변수를 만들어서 할당한다. 그러하여 함수 이름으로 호출이 가능한 것 같으나 실제로는 함수 변수를 호출한다.

 

 

Function( ) 생성자 함수 생성 방식

함수내의 function 생성자 함수를 통해 객체를 생성한다.

 

- function.js

function( )

// function ()
var fncAdd = new Function("x", "y", "return x+y");
console.log(fncAdd(3, 4));
  • new function 키워드
  • 매개변수 x , y
  • 실행 될 코드 return x+y

function 생성자 함수를 사용하는 방법이다.

 

 

Github Commit

※ 위 깃허브 링크에서 전체 코드를 확인할 수 있다.

 

 

이 글은 개인 공부목적으로 작성되었습니다.

정보가 잘못 되거나 궁금한 사항은 댓글로 부탁드립니다!! 읽어주셔서 감사합니다.