모던 자바스크립트 입문
아소 히로시 지음, 서재원 옮김
길벗
오늘도 어김없이 공부한 내용을 정리 하는 포스트를 작성한다. 오늘은 8장 함수 부분인데 이부분은 내가 모르고 있는 부분도 있고 제대로 알고 있지 않은 부분도 상당히 많았다. 항상 쓰는 것인데 제대로 알고 쓰질 않아서 실수 하는 경우가 종종 있었는데 제대로 알고 넘어가야 할것같다. 4절까지는 대부분 알고 있는 내용이라 읽고 넘어갔는데 5절, 6절 부터는 조금 심도 있게 공부를 진행해야 할것 같아 일단 4절까지만 정리 하였다.
아래 작성된 코드중 일부는 내가 조금 더 이해하기 쉽게 변경 하였다.
8장. 함수
8.1 함수 정의하기
-
함수를 정의 하는 방법
-
함수 선언문으로 정의 하는 방법
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");
-
화살표 함수 표현식으로 정의 하는 방법
var add = ( x, y ) => { return x + y};
-
- 자바스크립트 엔진은 함수 선언문을 프로그램의 첫머리 또는 함수의 첫머리로 끌어 올린다. 따라서 함수 선언문으로 정의한 함수는 호출문이 선언문 앞에 나와도 호출할 수 있다.
- 함수 리터럴, Function 생성자, 화살표 함수 표현식으로 정의한 함수는 변수에 그 함수의 참조를 할당해야 비로소 사용 가능하다, 그러므로 호출문이 선언문 뒤에 나와야 한다.
-
중첩 함수
- 특정 함수의 내부에 선언된 함수를 가리켜 그 함수의
중첨 함수
라고 한다. if문
과while문
등의 문장 블록 안에는 중첩함수를 작성할 수 없다.- 자신을 둘러싼 외부 함수의 인수와 지역변수에 접근 할 수 있다. 이는 클로저의 핵심 구성 요소가 된다.
- 특정 함수의 내부에 선언된 함수를 가리켜 그 함수의
8.2 함수 호출하기
-
함수를 호출하는 방법
- 함수 호출
- 메서드 호출
- 생성자 호출
call
,apply
를 사용한 간접 호출 ( 9장에서 추가 설명 )
-
즉시 실행 함수
- 익명 함수를 정의하고 곧바로 실행하는 함수를 가리켜
즉시 실행 함수
라 한다. - 일반적으로 전역 유효 범위를 오염시키지 않은 이름 공간을 생성할 때 사용한다.( 8.7절에 추가 설명 )
-
함수 정의을 그룹 연산자인 ()로 묶으면 바로 실행 시킬수 있다.
var sum = (function(x, y) { return x + y })(1, 2);
- 익명 함수를 정의하고 곧바로 실행하는 함수를 가리켜
8.3 함수의 인수
-
인수의 생략
- 함수 정의식에 작성된 인자의 개수보다 인수를 적게 전달하면 생략인 인자는
undefiend
가 된다.
- 함수 정의식에 작성된 인자의 개수보다 인수를 적게 전달하면 생략인 인자는
-
Arguments
객체-
모든 함수에는 지역 변수로 사용할 수 있는
arguments
변수가 존재한다. 이는Arguments
의 객체이다.arguments[0] // 첫 번째 인수 값. arguments[1] // 두 번째 인수 값.
Arguments
객체는유사 배열 객체
이다. ( 10.3절에 추가 설명)-
arguments
변수를 이용하면 인수 개수가 일정치 않은 함수를 정의 할 수 있다.function infiniteSum() { let sum = 0; for ( let i = 0, max = arguments.length; i < max; i += 1) { sum += arguments[i]; } return sum; } console.log(infiniteSum(1,2,3,4,5,6)); // 21
-
8.4 재귀함수
- 함수가 자기 자신을 호출 하는 행위를
재귀 호출(recursive call)
이라 한다. - 재귀 호출을 수행하는 함수를
재귀 함수
라고 한다. arguments.callee
를 사용하면 이름이 없는 익명 함수도 재귀 호출을 할 수 있다.arguments.callee
가 지금 실행 중인 함수를 가리키기 때문이다.-
재귀 함수 사용시 주의점
-
재귀 호출은 반드시 멈춰야 한다.
- 함수가 자신을 호출하면 무한한 연쇄 호출로 이어질수 있으므로 반드시 중간에 호출이 멈출수 있게 해야 한다.
-
재귀 호출로 문제를 간단히 해결 할 수 있을때만 사용한다.
- 호출된 횟수만큼 메모리 소비량이 늘어난다.
for문
이나while문
에 비해 이해하기 어렵다.
-
-
재귀 함수의 예
- 생략
이 코드는 모던 자바스크립트 입문(徹底マスターJavaScriptの教科書) 에서 인용한 것입니다.
[ISBN #978-4797388640]. Copyright 2017 by 磯博