1급 시민
-
변수에 담을 수 있다.
-
함수(혹은 메소드)의 인자(매개변수, Parameter)로 전달할 수 있다.
-
함수(혹은 메소드)의 반환값(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급시민입니다.
-
자바스크립트의 개체는 함수의 인자가 될 수 있다.
-
자바스크립트의 객체는 함수의 리턴이 될 수 있다.
-
자바스크립트의 객체는 변수에 할당 될 수 있다.
var a = {msg: 'a는 1급 객체입니다.'} // 변수에 담을 수 있다.
function f1 (a) { // 매개변수로 전달할 수 있다.
var b = a
b.msg2 = '2번째 메세지입니다.'
return b // return으로 전달할 수 있다.
}
1급 함수
* 1급 객체란, 말 그대로 1급 시민의 조건을 충족하는 객체(Object) 입니다. javascript에서 객체는 1급시민입니다.
-
자바스크립트의 함수는 변수에 할당할 수 있다.
-
자바스크립트의 함수는 매개변수로 전달할 수 있다.
-
자바스크립트의 함수는, 함수를 반환할 수 있다.
// 변수에 함수를 할당한다.
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 |
댓글