JavaScript & jQuery
자바스크립트 함수 객체
yujeong kang
2021. 6. 18. 15:19
var add = function (x, y) {
return x + y;
};
add.result = add(3,2);
add.status = 'OK';
console.log(add(4,3)); // 7
console.log(add.result); // 5
console.log(add.status); // OK
함수도 객체처럼 프로퍼티를 가질 수 있다.
자바스크립트에서 함수도 객체로 값으로 취급된다 !
- 리터럴에 의해 생성
- 변수나 배열의 요소, 객체의 프로퍼티 등에 할당 가능
- 함수의 인자로 전달 가능
- 함수의 리턴값으로 리턴 가능
- 동적으로 프로퍼티 생성 및 할당 가능
위와 같은 특징으로 함수는 일급 객체라고 부른다.
위키백과의 일급 객체 정의이다. 저 조건이 만족하면 일급 객체라고 한다.
(1) 변수나 프로퍼티의 값으로 할당
var obj = {};
obj.func = function () { return 100; };
console.log(obj.func()); // 100
(2) 함수 인자로 전달
var f = function (func) {
func();
};
f(function() {
console.log('hi');
});
// 출력 : hi
익명함수를 func 인자로 넘기면서 func를 실행할 수 있다.
(3) 리턴값으로 리턴
var f = function () {
return function() {
console.log('hi');
};
};
var bar = f();
bar();
// 출력 : hi
(4) 함수 객체의 기본 프로퍼티
함수를 console.dir() 로 출력해보면
arguments, caller, length, name, prototype, __proto__ 등이 나온다.
함수가 기본적으로 가지고 있는 프로퍼티가 있다는 얘기다.
- arguments 는 함수 호출 시 전달된 인자값
- caller 는 자신을 호출한 함수
- name 은 함수의 이름으로 익명함수의 경우 빈 문자열
- __proto__ 는 객체의 부모객체로 함수의 경우 (함수 부모객체) Function.prototype 객체다.
모든 함수의 부모 객체인 Function.prototype은- constructor
- toString()
- apply()
- call()
- bind()
를 가지고 있다.
- length 는 정상적으로 실행될 때 기대되는 인자의 개수 ( 즉, 함수에서 정의한 인자 수 )
- prototype 은 객체로서 constuctor 프로퍼티를 가진 객체를 가리킨다. 그 constuctor 프로퍼티는 자신과 연결된 함수를 가리킨다.
함수의 prototype은 함수 객체를 가리키는 constructor를 포함한 prototype 객체를 가리킨다.