-
12 함수모던 자바스크립트 딥 다이브 독학 2023. 10. 9. 08:22
함수란?
- 일련의 과정을 문으로 구현하고 코드 블록으로 감싸서 하나의 실행 단위로 정의한 것
- 내부로 입력을 전달받는 매개변수, 입력을 인수, 출력을 반환값이라 한다.
- 함수 정의를 통해 생성한다.
- 일반 객체는 호출할 수 없지만 함수는 호출할 수 있다.
함수를 사용하는 이유
- 유지보수의 편의성을 높이고 실수를 줄여 코드의 신뢰성을 높인다.
- 코드의 가독성을 향상시킨다.
함수 리터럴
// 변수에 함수 리터럴을 할당 var f = function add(x, y) { return x + y; };
기명함수(이름이 있는 함수), 무명/익명함수(이름 없는 함수)
함수 정의
//함수 선언문 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;
- 함수 선언문은 함수 이름을 생략할 수 없다. 함수 선언문은 표현식이 아닌 문이다. 함수 리터럴은 함수 이름 생략 가능하다.
// 기명 함수 리터럴을 단독으로 사용하면 함수 선언문으로 해석된다. // 함수 선언문에서는 함수 이름을 생략할 수 없다. function foo() {console.log('foo');} foo(); // foo // 자바스크립트 엔진은 생성된 함수를 호출하기 위해 함수 이름과 동일한 이름의 식별자를 암묵적으로 // 생성하고, 거기에 함수 객체를 할당한다. // 함수 리터럴을 피연산자로 사용하면 함수 선언문이 아니라 함수 리터럴 표현식으로 해석된다. // 함수 리터럴에서는 함수 이름을 생략할 수 있다. (function bar() { console.log('bar'); }); bar(); // ReferenceError: bar is not defined // 함수 리터럴에서 함수 몸체 외부에서는 함수 이름으로 함수를 참조할 수 없으므로 함수 몸체 외부에서는 // 함수 이름으로 호출할 수 없다.(함수를 가리키는 식별자가 없다는 것과 마찬가지)
- 값의 성질을 갖는 객체를 일급 객체라 한다. 자바스크립트의 함수는 일급 객체다.
- 함수 선언문으로 정의한 함수와 함수 표현식으로 정의한 함수의 생성 시점은 다르다. (함수 호이스팅) - 함수 선언문이 코드의 선두로 끌어 올려진 것처럼 동작
- 함수 표현식으로 함수를 정의하면 함수 호이스팅이 발생하는 것이 아니라 변수 호이스팅이 발생한다.
- Function 생성자 함수로 생성한 함수는 클로저를 생성하지 않아 일반적이지 않으며 바람직한 방법이 아니다.
- 화살표 함수는 항상 익명 함수로 정의한다. (표현만 간략한 것이 아니라 내부 동작 또한 간략화)
함수 호출
- 매개변수는 함수 몸체 내부에서만 참조할 수 있다. 매개변수의 스코프(유효 범위)는 함수 내부다.
- 자바스크립트 함수는 매개변수의 개수와 인수의 개수가 일치하는지 체크하지 않는다.
- 자바스크립트는 동적 타입 언어다. 따라서 자바스크립트 함수는 매개변수의 타입을 사전에 지정할 수 없다.
매개변수의 최대 개수
- 이상적인 함수는 한 가지 일만 해야 하며 가급적 작게 만들어야 한다.
- 매개변수는 3개 이상 넘지 않는 것을 권장한다.
- 객체를 인수로 사용하는 경우 프로퍼티 키만 정확히 지정하면 매개변수의 순서를 신경 쓰지 않아도 된다.
반환문
- return 키워드 뒤에 반환값으로 사용할 표현식을 명시적으로 지정하지 않으면 undefined가 출력된다.
함수형 프로그래밍
- 외부 상태를 변경하지 않고 외부 상태에 의존하지도 않는 함수를 순수 함수라 한다. 함수형 프로그래밍이란 순수 함수를 통해 부수효과를 최대한 억제하여 오류를 피하고 프로그램의 안정성을 높이려는 프로그래밍 패러다임이다.
- 즉시 실행 함수 → 단 한번만 호출되며 다시 호출할 수 없다.
(function () { var a = 3; var b = 5; return a * b; }());
콜백 함수: 함수의 매개변수를 통해 다른 함수의 내부로 전달되는 함수
고차 함수: 매개변수를 통해 함수의 외부에서 콜백 함수를 전달받은 함수
순수함수: 어떤 외부 상태에도 의존하지 않으며 외부 상태를 변경하지도 않는 함수
비순수함수: 외부 상태에 의존하거나 외부 상태를 변경하는 함수
비순수함수를 최대한 줄이는 것은 부수 효과를 최대한 억제하는 것.
'모던 자바스크립트 딥 다이브 독학' 카테고리의 다른 글
14 전역 변수 (0) 2023.10.11 13 스코프 (0) 2023.10.10 11 원시 값과 객체의 비교 (0) 2023.10.08 10 객체 리터럴 (0) 2023.10.07 09 타입 변환, 단축 평가 (0) 2023.10.06