[모던딥다이브 자바스크립트] 12장 함수

zzzzzang_gu·2023년 2월 28일
0

자바스크립트

목록 보기
10/23

함수란 ?

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

함수의 생성 - 함수는 함수 정의를 통해 생성한다. 자바스크립트의 함수는 다양한 방법으로 정의할 수 있다.


함수 정의

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

	//화살표 함수 (ES6)
	var add = (x,y) => x+y;

함수 리터럴은 함수 이름을 생략할 수 있으나 함수 선언문은 함수 이름을 생략할 수 없다.

단독으로 사용된 함수 리터럴은 함수 선언문으로 해석된다. 하지만 함수 리터럴을 피연산자로 사용하면 함수 선언문이 아니라 함수 리터럴 표현식으로 해석된다. 함수 이름은 함수 몸체 내에서만 참조할 수 있는 식별자다. 함수 몸체 외부에서는 함수 이름으로 함수를 참조 할 수 없다. 즉 ex) 그룹연산자 - () 를 이용한 함수 리터럴 표현식은 함수를 가르키는 식별자가 없다는 것과 마찬가지다.

자바스크립트 엔진이 함수 선언문을 함수 이름과 동일한 이름의 식별자를 암묵적으로 생성하, 거기에 함수 객체를 할당한다.


함수 표현식

자바스크립트의 함수는 객체 타입의 값이다. 함수는 값처럼 변수에 할당할 수도 있고 프로퍼티 값이 될 수도 있으며 배열의 요소가 될 수도 있다. 이처럼 값이 성질을 갖는 객체를 일급 객체라 한다. 자바스크립트의 함수는 일급 객체다. 함수를 값처럼 자유롭게 사용할 수 있다는 의미이다.

함수 선언문은 '표현식이 아닌 문'이고 함수 표현식은 '표현식인 문'이다.
함수 선언문으로 정의한 함수는 런타임 이전에 자바스크립트 엔진에 의해 먼저 실행되고, 이를 함수 호이스팅이라 한다. 함수 표현식은 변수 호이스팅이 먼저 발생하고 변수 할당문의 값은 런타임에 평가된다.

함수 호이스팅은 함수를 호출하기 전에 반드시 함수를 선언해야 한다는 규칙을 무시하므로 함수 선언문 대신 함수 표현식을 사용하자.


매개변수와 인수

함수를 실행하기 위해 필요한 값을 함수 외부에서 함수 내부로 전달할 필요가 있을 경우, 매개변수(parameter)를 통해 인수(argument)를 전달한다. 인수는 값으로 평가될 수 있는 표현식이여야 한다. 매개변수는 함수 내부에서 변수와 동일하게 취급된다. 함수가 호출되면 함수 몸체 내에서 암묵적으로 매개변수가 생성되고 undefined로 초기화된 이후 인수가 순서대로 할당된다.

매개변수의 스코프(유효 범위)는 함수 내부이다.


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

add(2,3) // 5
add(2) // NaN -인수가 부족해서 인수가 할당되지 않은 매개변수의 값은 undefined이다.
add(2,3,5) // 5 - 초과된 인수는 버려지는 것이 아니라 암묵적으로 argument 객체의 프로퍼티로 보관된다.

매개변수의 최대 개수

함수는 한 가지 일만 해야 하며 가급적 작게 만들어야 한다. 따라서 매개변수는 최대 3개 이상을 넘지 않는 것을 권장한다. 많은 매개변수가 필요하다면 하나의 매개변수를 선언하고 객체를 인수로 전달하는 것이 유리하다.

profile
프론트엔드 개발자가 되겠습니다🔥

0개의 댓글