Hi

(javascript) 함수 객체 : 함수도 객체다 본문

WEB(웹)

(javascript) 함수 객체 : 함수도 객체다

SharingWorld 2018. 6. 22. 17:29
함수 객체

함수 객체 : 함수도 객체다

자바스크립트에서는 함수도 객체다

// 함수 선언 방식으로 add()함수 정의
function add(x, y) {
	return x + y;
}

// add() 함수 객체에 result, status 프로퍼티 추가
add.result = add(3, 2);
add.status = 'OK';

console.log(add.result); // 5
console.log(add.sattus); // 'OK'



add()함수 객체는 [[Code]] 프로퍼티, result와 status 프로퍼티를 가진다.

자바스크립트에서 함수는 값으로 취급된다

자바스크립트에서 함수는 객체다.
함수도 일반 객체처럼 취급 될수 있다.

  • 리터럴에 의해 생성
  • 변수나 배열의 요소, 객체의 프로퍼티 등에 할당 가능
  • 함수의 인자로 전달 가능
  • 함수의 리턴값으로 리턴 가능
  • 동적으로 프로퍼티를 생성 및 할당 가능

함수는 일급객체 -> 앞에서 나열한 기능이 모두 가능한 객체
일급객체의 특성 : 함수형 프로그래밍이 가능
함수가 일급 객체이며 이는 곧 함수가 일반 객체처럼 값(value)으로 취급된다.
함수를 변수나 객체, 배열 등에 값으로도 저장할 수 있으며, 다른 함수의 인자로 전달한다거나 함수의 리턴값으로 사용가능하다.

변수나 프로퍼티의 값으로 할당

// 변수에 함수 할당
var foo = 100;
var bar = function() { return 100; };
console.log(bar()); // 100

// 프로퍼티에 함수 할당
var obj = {};
obj.baz = function() { return 200; }
console.log(obj.baz()); // 200

함수 인자로 전달

// 함수 표현식으로 foo() 함수 생성
var foo = function(func) {
	func(); // 인자로 받은 func() 함수 호출
};

// foo() 함수 실행
foo(function() {
	console.log('Function can be used as the argument.');
});
[출력결과]
Function can be used as the argument.

리턴값으로 활용

// 함수를 리턴하는 foo() 함수 정의
var foo = function() {
	return function() {
		console.log('this function is the return value.')
	};
};

var bar = foo();
bar();
[출력 결과]
this function is the return value.

함수 객체의 기본 프로퍼티

함수 객체만의 표준 프로퍼티가 정의되어 있다.
ex) auguments, caller, length

name  프로퍼티 : 함수의 이름
caller 프로퍼티 : 자신을 호출한 함수
argument 프로퍼티 : 함수를 호출할 때 전달된 인자값
__proto__ 프로퍼티 : [[Prototype]] 과 같은 개념. 

함수 객체의 부모 열할을 하는 프로토타입 객체 -> Function.prototype 객체

Function.prototype 객체의 부모는 Object.prototype 객체

length 프로퍼티

모든 함수가 가져야 하는 표준 프로퍼티

function func0() {

}

function func1(x) {
	return x;
}

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

function func3(x, y, z) {
	return x + y + z;
}

console.log(func0.length); // 0
console.log(func1.length); // 1
console.log(func2.length); // 2
console.log(func3.length); // 3

함수 객체의 length 프로퍼티 : 함수를 작성할 때 정의한 인자 개수

prototype 프로퍼티

// MyFunction() 함수 정의
function myFunction() {
	return true;
}

console.dir(myFunction.prototype);
console.dir(myFunction.prototype.constructor);

myFunction() (함수 객체)에는 prototype 프로퍼티를 가지고 있고,


myFunction().prototype (프로토타입 객체)에는 constructor 프로퍼티가 있어 이 constructor 프로퍼티가 자신과 연결된 함수를 가리킨다.
이렇듯 함수 객체와 프로토타입 객체는 서로 밀접하게 연결돼 있다.


'WEB(웹)' 카테고리의 다른 글

(javascript) 캡슐화  (0) 2018.06.25
(javascript) 함수의 다양한 형태  (0) 2018.06.25
(javascript) isNaN()  (0) 2018.06.22
(javascript) window 객체  (0) 2018.06.22
브라우저 객체 모델  (0) 2018.06.22