동그란 도그린
[모던 자바스크립트 Deep Dive🦎] 12장 : 함수 본문
📍 함수
- 자바스크립트의 함수는 객체 타입의 값
- 자바스크립트는 함수를 호출하기 위해 함수 이름과 동일한 이름의 식별자를 암묵적으로 생성 후 그 식별자에 객체를 할당 ⇒ 함수는 함수 이름이 아닌 함수 객체를 가리키는 식별자로 호출
- 함수 정의 방식
함수 선언문 | 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 키워드, 함수 이름, 매개변수 목록, 함수 몸체로 구성
- 함수 이름 생략 가능 (익명 함수)
// 변수에 함수 리터럴 할당 var f = function add(x, y) { return x+y; };
- 함수 선언문
- 함수 이름 생략 불가능
- 표현식이 아닌 문 ⇒ 변수에 할당 불가
- 함수 선언문으로 정의한 함수는 함수 선언문 이전에 함수 호이스팅에 의해 호출 가능 (함수 선언문은 런타임 이전에 자바스크립트 엔진에 의해 먼저 실행됨)
- 함수 표현식
- 함수 리터럴로 생성한 함수 객체를 변수에 할당하는 방식
- 🔅 자바스크립트의 함수는 값의 성질을 갖는 객체인 일급 객체
- 함수 표현식으로 정의한 함수는 함수 표현식 이전에 호출 불가 (함수 호이스팅이 아닌 변수 호이스팅이 발생하므로 함수 표현식 이전에 함수를 참조하면 undefined로 평가되고, 타입 에러가 발생)
- 함수 리터럴로 생성한 함수 객체를 변수에 할당하는 방식
🔅 함수 호이스팅은 함수를 호출하기 전에 반드시 함수를 선언해야 하는 규칙을 무시하므로 함수 선언문 대신 함수 표현식을 사용할 것을 권장
- Function 생성자 함수
- 일반적이지 않고 바람직하지 않은 방식
- 함수 선언문이나 함수 표현식으로 생성한 함수와는 동일하게 동작하지 않음
- 화살표 함수
- 항상 익명 함수로 정의
- 기존의 함수보다 표현만 간략한 게 아니라 내부 동작도 간략화됨
- 생성자 함수로 사용 불가, 기존 함수와 this 바인딩 방식이 다름, prototype 프로퍼티 없음, arguments 객체 생성 X
📍 함수 호출
- 매개변수
- 매개변수의 스코프(유효범위)는 함수 내부
- 함수는 매개변수의 개수와 인수의 개수가 일치하는지 체크 X
- 개수가 달라도 에러 발생 X
- 인수가 부족해서 할당되지 않은 매개변수의 값은 undefined
- 매개변수보다 인수가 더 많으면 초과된 인수가 무시됨 (버려지진 X)
- 모든 인수는 arguments 객체의 프로퍼티로 보관됨
📍 다양한 함수의 형태
- 즉시 실행 함수
- 함수 정의와 동시에 즉시 호출되는 함수
- 단 1번만 호출되며, 다시 호출할 수 없음
- 익명 함수는 사용하는 것이 일반적
- 즉시 실행 함수는 반드시 그룹 연산자 (…)로 감싸야 함 (감싸지 않으면 에러 발생)
- 일반 함수처럼 값 반환과 인수 전달 가능
(function () { var a = 1; var b = 2; return a*b; }());
- 중첩 함수
- 중첩 함수/내부 함수 : 함수 내부에 정의된 함수, 자신을 포함하는 외부 함수를 돕는 헬퍼 함수의 역할
- 외부 함수 : 중첩 함수를 포함하는 함수
- 중첩 함수는 고정되어 있어 교체하기 곤란함
- 콜백 함수
- 콜백 함수 : 함수의 매개변수를 통해 다른 함수의 내부로 전달되는 함수
- 고차 함수 : 매개 변수를 통해 함수의 외부에서 콜백 함수를 전달받은 함수
- 콜백 함수는 자유롭게 교체 가능
- 고차 함수는 콜백 함수를 자신의 일부분으로 함성함
- 고차 함수는 매개변수를 통해 전달받은 콜백 함수의 호출 시점을 결정해서 호출함
- 순수 함수와 비순수 함수
- 순수 함수 : 어떤 외부 상태에 의존하지 않고, 변경하지 않고, 부수 효과가 없는 함수
- 비순수 함수 : 외부 상태에 의존하거나 외부 상태를 변경하고, 부수 효과가 있는 함수
- 순수 함수는 동일한 인수가 전달되면 언제나 동일한 값을 반환, 인수의 불변성을 유지
- 내부 상태가 호출될 때마다 값이 변화하면 비순수 함수
'FrontEnd > Javascript' 카테고리의 다른 글
[모던 자바스크립트 Deep Dive🦎] 14장 : 전역 변수의 문제점 (0) | 2023.05.21 |
---|---|
[모던 자바스크립트 Deep Dive🦎] 13장 : 스코프 (0) | 2023.05.21 |
[모던 자바스크립트 Deep Dive🦎] 11장 : 원시 값과 객체의 비교 (0) | 2023.04.26 |
[모던 자바스크립트 Deep Dive🦎] 10장 : 객체 리터럴 (0) | 2023.04.06 |
[모던 자바스크립트 Deep Dive🦎] 9장 : 타입 변환과 단축 평가 (0) | 2023.04.06 |
Comments