- 특정한 기능을 제공하기 위한 코드의 집합
- 호출을 통해 결과값을 얻음
- 객체 자료형 중 하나
- 함수도 하나의 값처럼 취급되기 때문에 변수에 할당 가능
- 함수 생성시 함수명은 선택사항으로 함수명 없이 함수를 생성할 수 있음
- 함수 선언문으로 정의하는 방법
function ooo(x) { return x*x }
- 함수 리터럴로 정의하는 방법
var ooo = function(x){ return x*x }
- Function 생성자로 정의하는 방법
var ooo = new Function("x", "return x*x")
- 화살표 함수 표현식으로 정의하는 방법
- 함수 선언문으로 정의한 함수는 호출문이 그보다 앞에 위치해도 호출할 수 있다
console.log(ooo(2)); // 4
function ooo(x) { return x*x }
- 그러나 함수 리터럴, Function 생성자, 화살표 함수 표현식으로 정의한 함수는 변수에 그 함수의 참조를 할당해야 비로소 사용할 수 있는 상태가 되기 때문에 이 세가지 방법으로 함수를 정의하는 코드는 호출하는 코드보다 앞에 위치해야 한다
- 함수에서 정의된 매개변수보다 많이 사용하면 추가된 매개변수는 무시 -> 입력된 매개변수를 활용할 수 있도록 함수 구현 가능(가변 인자 함수)
- 함수에서 정의된 매개변수보다 적게 사용하면 부족한 매개변수 대신 undefined가 입력
- 함수 호출
- 함수의 참조가 저장된 변수 뒤에 그룹 연산자인 ()를 붙여서 함수를 호출
- 메서드 호출
- 메서드 : 객체의 프로퍼티에 저장된 값이 함수 타입일 때 그 프로퍼티를 메소드라고 함
- 메서드를 호출 시 그룹 연산자인 ()를 붙여서 호출(1의 방식과 동일)
obj.m = function() {...}
obj.m();
- 생성자 호출
- 함수의 참조를 저장한 변수 앞에 new 키워드를 추가하면 함수가 생성자로 동작
- call, apply를 사용한 간접 호출
- 함수의 call과 apply 메서드를 사용하면 함수를 간접적으로 호출할 수 있음
- 중첩함수 : 특정 함수의 내부에 선언된 함수
- 지역함수 또는 내부 함수(Inner Function)라고도 함
- 자바스크립트에서는 외부 함수의 최상위 레벨에만 중첩 함수를 작성할 수 있음
- 함수 안의 if 문과 while 문 등의 문장 블록 안에는 중첩 함수를 작성할 수 없음
- 중첩 함수의 참조는 그 중첩 함수를 둘러싼 외부 함수의 지역 변수에 저장되므로 외부 함수의 바깥에서는 읽거나 쓸 수 없음
- 자신을 둘러싼 외부 함수의 인수와 지역 변수에 접근할 수 있음
- 외부 함수의 변수 유효 범위가 그 함수의 중첩 함수에까지 미침
- 익명함수 : <script></script> 태그 내부의 내용을 위에서 아래로 읽어 해석
- 선언함수 : 다른 내용을 읽고 해석하기 전에 먼저 읽고 해석
- 함수 선언 이전에 익명함수를 호출하면 오류가 발생하나 선언적 함수는 오류가 발생하지 않음
- 일반적으로 익명 함수를 실행할 때는 익명 함수의 참조를 변수에 할당한 후 그룹 연산자인 ()를 붙여서 실행
var f = function() {...};
f();
- 즉시 실행 함수 : 익명 함수를 정의하고 곧바로 실행하는 구문
(function() {...})()
(function() {...}());
// 즉시 실행 함수에도 인수를 넘길 수 있음
(function(a,b) {...})(1,2);
- 즉시 실행 함수에도 이름을 붙일 수는 있지만 함수 이름이 함수 내부에서만 유효
- 함수 실행 결과를 면수에 할당할 수 있으며 표현식 안에서 사용할 수 있음
var x = (function() {...})();
- 즉시 실행 함수는 전역 유효 범위를 오염시키지 않는 이름 공간을 생성할 때 사용
- 매개 변수의 개수가 변할 수 있는 함수
- 정의된 것과 달리 입력된 매개 변수를 모두 활용할 수 있는 함수
- 모든 함수는 매개 변수를 arguments 배열에 저장함