티스토리 뷰

함수 선언문

function funcName(x, y) { return x + y; }

내부적으로 함수 표현식으로 변환됨

let funcName = function funcName(x,y) { return x + y; };

 

함수 표현식

함수 리터럴로 만든 함수를 변수에 할당하여 함수를 생성하는 것

let funcName = function (x,y) { return x + y; };

이름을 안 붙일수도 있고 (익명 함수 표현식), 이름을 붙일 수도 있음 (기명 함수 표현식).

단, 이름을 붙여도 함수 내부에서 재귀적으로 호출하거나 디버거에서 구분을 위해 사용하는 것만 가능하고, 외부에서 해당 이름으로 호출할 수 없음.

 

Function() 생성자

new Function(arg1, arg2, ... , argN, functionBody);

var add = new Function('x', 'y', 'return x + y');

자주 사용되지 않음

 

 

함수 선언문의 경우 함수 호이스팅()이 발생해서 코드 구조를 엉성하게 만들 수 있으므로 함수 표현식만을 사용할 것을 권장

 

 

함수도 객체다

일반 객체처럼 프로퍼티 추가 가능

함수를 선언문 방식으로 함수를  생성할 때 함수 코드는 함수 객체의 [[Code]] 내부 프로퍼티에 자동으로 저장된다. (ECMAScript 명세)

'일급 객체' (값처럼 취급됨 - 변수,배열,프로퍼티에 할당 가능, 함수 인자로 전달 가능, 리턴값으로 리턴 가능)

 

함수 객체의 기본 프로퍼티

ECMA5 명세

length: 함수가 정상적으로 실행될 때 기대되는 인자의 개수 (함수를 작성할 때 정의한 인자 개수)

prototype: != __proto__, 이 함수가 생성자로 사용될 때 이 함수를 통해 생성된 객체의 부모 역할을 하는 프로토타입 객체 (해당 프로토타입 객체는 constructor 프로퍼티로 다시 이 함수를 가리키고 있음)

비표준

name: 함수의 이름 (익명이면 빈 문자열)

caller: 자신을 호출한 함수 (호출되지 않았으면 null)

arguments: 함수를 호출할 때 전달된 인자값 (호출되지 않았으면 null) (cf: ECMA 표준: arguments 객체)

__proto__: 내부 프로퍼티 [[Prototype]]의 구현, Function.prototype 객체 (Empty()함수, 함수이지만 예외적으로 부모는 Function.prototype이 아닌 Object.prototype)

Function.prototype 객체

프로퍼티: constructor, 메서드: toString(), apply(thisArg, argArray), call(thisArg, [, arg1 [, arg2, ]]) 메서드, bind(thisArg, [, arg1 [,arg2,]]) 메서드

 

콜백 함수: 함수를 등록만 해놓고 이벤트 핸들러 등에 의해 실행

즉시 실행 함수: 함수의 정의와 동시에 실행( (function (arg1) { ... })(val1); ) 초기화 코드에 많이 사용

내부 함수: 함수 내부에 정의. 함수 내부에서는 접근 가능하나 함수 외부에서는 접근 불가능 (접근하려면 외부함수에서 리턴해줘야) 내부 함수에서는 외부 함수 접근 가능 (클로저 개념 확인)

 

argument 객체

함수 호출 시 인자를 정의보다 적게 넘긴 경우: 앞에서부터 할당되고 나머지는 undefined

많이 넘긴 경우: 초과된 인수는 무시

함수 호출 시 인수들과 함께 암묵적으로 argument 객체가 함수 내부로 전달됨

argument 객체: 함수 호출 시 넘긴 인자들이 배열 형태로 저장된 객체 (유사 배열 객체 - 배열 메서드 사용 불가, 사용하려면 call/apply 메서드 이용한 this 바인딩 필요)

프로퍼티: 함수 호출 때 넘겨진 인자 (배열 형태), length, callee (현재 실행 중인 함수의 참조값) 

 

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
글 보관함