본문 바로가기
javascript

[Javascript] 1급 객체(First-class object)

by dyyoo 2019. 11. 6.

1급 시민

  1. 변수에 담을 수 있다.

  2. 함수(혹은 메소드)의 인자(매개변수, Parameter)로 전달할 수 있다.

  3. 함수(혹은 메소드)의 반환값(return)으로 전달할 수 있다.

자바스크립트에서 원시 값(일반 자료형)은 1급 객체이다.

 

var temp_int = 1; // 숫자는 변수에 담긴다.
function fn_test_int(a){
	return a;
}

var ret_int = fn_test_int(3);  // 숫자는 함수의 인자가 된다.
console.log(ret_int);   // 숫자는 함수의 리턴이 된다.

 

1급 객체

* 1급 객체란, 말 그대로 1급 시민의 조건을 충족하는 객체(Object) 입니다. javascript에서 객체는 1급시민입니다. 

  1. 자바스크립트의 개체는 함수의 인자가 될 수 있다.

  2. 자바스크립트의 객체는 함수의 리턴이 될 수 있다.

  3. 자바스크립트의 객체는 변수에 할당 될 수 있다.

var a = {msg: 'a는 1급 객체입니다.'} // 변수에 담을 수 있다.
function f1 (a) { // 매개변수로 전달할 수 있다.
  var b = a
  b.msg2 = '2번째 메세지입니다.'
  return b  // return으로 전달할 수 있다.
}

 

1급 함수

* 1급체란, 말 그대로 1급 시민의 조건을 충족하는 객체(Object) 입니다. javascript에서 객체는 1급시민입니다. 

  1. 자바스크립트의 함수는 변수에 할당할 수 있다.

  2. 자바스크립트의 함수는 매개변수로 전달할 수 있다.

  3. 자바스크립트의 함수는, 함수를 반환할 수 있다.

// 변수에 함수를 할당한다.
var a = function (num) {
  return num * num
}
// 매개변수로 함수를 전달한다.
function b (fun) {
  var num = fun(10)
  // return 값으로 함수를 사용할 수 있다.
  return function (num2) {
    var num2 = num2 || 2
    return num * num2
  }
}
// b에 a라는 함수 전달했으며
// b는 다시 함수를 반환한다.
// 결국 c도 함수로 사용할 수 있다.
var c = b(a)
console.log(c())  // result : 200
console.log(c(3)) // result : 300

 

추가적으로, 위에서 Closure를 생각할 수 있다. 클로져

var fn = function (){
  var num = 1
  return function () {
    return num++
  }
}
var fn2 = fn() // fn을 실행함과 동시에, fn 속에 있는 num이 만들어진다.
// fn2를 실행할 경우, fn의 num값을 다루게 되며, fn의 num은 소멸되지 않고 메모리에 계속 잔류하게 된다.
// 따라서 다음과 같은 결과를 확인할 수 있다.
console.log(fn2()) // 1
console.log(fn2()) // 2
console.log(fn2()) // 3
console.log(fn2()) // 4

 

 

 

 

 

'javascript' 카테고리의 다른 글

[Javascript] 함수 선언식, 표현식  (0) 2019.11.08
[Javascript] 콜백함수(Callback function)  (0) 2019.11.07
[Javascript] Closure  (0) 2019.10.22
[Javascript] 스코프, 호이스팅(Hoisting)  (0) 2019.10.21
[Javascript] LHS,RHS 검색  (0) 2019.10.21

댓글