12장_함수에대한 정리

박눌찡·2023년 3월 24일

자바스크립트에서 가장 중요한 함수에 대한 정리를 해보았다.

📌함수란?

함수는 일련의 과정을 문(satement)으로 구현하고 코드 블록으로 감싸서 하나의 실행 단위로 정의한 것이다.

함수 내부로 입력을 전달받는 변수를 매개변수(parameter), 입력을 인수(argument), 출력을 반환값(return value)이라 한다.

📌함수를 사용하는 이유?

함수는 필요할 때 여러번 호출할 수있다. 즉, 실행 시점을 개발자가 결정할 수 있고 몇 번이든 재사용이 가능하다.
코드의 중복을 억제하고 재사용성을 높이는 함수는 유지보수의 편의성을 높이고 실수를 줄여 코드의 신뢰성을 높이는 효과가 있다.

📌함수 리터럴이란?

함수 리터럴은 function 키워드, 함수 이름, 매개변수 목록, 함수 몸체로 구성된다.
리터럴의 구성 요소는 함수이름, 매개변수 목록, 함수 몸체 등으로 구성되어있다.
즉, 리터럴은 값을 생성 하기 위한 표기법이다.
⭐️즉 함수는 객체다.
⭐️일반 객체는 호출할 수 없지만 함수는 호출 할 수 있다.

📌함수 정의

함수를 호출하기 이전에 인수를 전달받을 매개변수와 실행할 문들, 그리고 반환할 값을 지정하는 것을 말한다.
함수를 정의하는 방법은 4가지가 있다.

  1. 함수 선언문
function add(x, y) { 
	return x + y;
	}
  1. 함수 표현식
var add = function (x, y){
	return x+y;
    }
  1. function 생성자 함수
var add = new Function('x','y','return x + y');
  1. 화살표 함수(ES6)
var add = (x,y) => x + y;

자바스크립트 엔진은 생성된 함수를 호출하기 위해 함수 이름과 동일한 이름의 식별자를 암묵적으로 생성하고, 거기에 함수 객체를 할당한다.

var add = funciton add(x,y) {
	return x + y; 
};
console.log(add(2,5)) // 7 

*함수는 함수 이름으로 호출하는 것이 아니라 함수 객체를 가르키는 식별자로 호출한다. 즉, 함수 선언문으로 생성한 함수를 호출한 것은 함수 이름 add가 아니라 자바스크립트 엔진이 암묵적으로 생성한 식별자 add인 것이다.

📌함수 표현식

위에서 언급했듯이 함수는 객체타입의 값이다.
이처럼 값의 성질을 갖는 객체를 일급 객체라 한다.
자바스크립트의 함수는 일급 객체다.

함수 선언문으로 정의한 함수를 함수 표현식으로 바꿔서 정의하면 다음과 같다.

var add = function(x,y){
	return x + y; 
}
console.log(add(2,5))//7

📌함수 호이스팅(hoisting)

함수 선언문이 코드의 선두로 끌어 올려진 것처럼 동작하는 자바스크립트 고유의 특징을 함수 호이스팅이라 한다.

📌반환문

함수는 return 키워드와 표현식(반환값)으로 이뤄진 반환문을 사용해 실행 결과를 함수 외부로 반환할 수 있다.

function miltiply(x,y){
	rutunr x * y; //반환문
}

//함수 호출은 반환값으로 평가된다. 
var result = multiply(3,5);
console.log(result);//15

함수 호출은 표현식이다. return키워드가 반환한 표현식의 평가 결과, 즉 반환값으로 평가된다.
반환문은 두가지 역할을 한다.
1. 반환문은 함수의 실행을 중단하고 함수 몸체를 빠져나간다. 따라서 반환문 이후에 다른 문이 존재하면 그 문은 실행되지 않고 무시된다 .

funciton multiply(x,y){
	ruturn x * y;//반환문
    //반환문 이후에 다른 문이 존재하면 그 문은 실행되지 않고 무시된다.
    console.log('실행되지 않는다.');
}

conosle.log(multiply(3,5))//15
  1. 반환문은 return 키워드 뒤에 오는 표현식을 평가해 반환한다. return 키워드 뒤에 반환값으로 사용할 표현식을 명시적으로 지정하지 않으면 undefinded가 반환된다.
function foo () {
	return;
}
console.log(foo()) // undefinded 
profile
개발자 성장 과정 기록

0개의 댓글