- 무명의 리터럴로 생성할 수 있음. 런타임에 생성이 가능
- 변수나 자료구조(객체, 배열 등)에 저장 가능
- 함수의 매개변수에 전달
- 함수의 반환값으로 사용
//무명의 리터럴로 생성
const increase = function (num) {
return ++num;
}
const decrease = function (num) {
return --num;
}
// 객체에 저장
const predicates = { increase, decrease };
//매겨변수로 전달 및 반환값으로 사용
function makeCounter(predicates) {
let num = 0;
return function () {
num = predicates(num);
return num;
};
}
const increaser = makeCounter(predicates.increase);
console.log(increaser());
console.log(increaser());
const decreaser = makeCounter(predicates.decrease);
console.log(decreaser());
console.log(decreaser());
일급 객체
함수가 가지는 가장 큰 특징
-> 함수의 매개변수에 전달 가능 + 함수의 반환값으로 사용 가능!!
함수형 프로그래밍 가능
함수 객체는 일반 객체에는 없는 함수 고유의 프로퍼티
를 소유
함수 == 객체
arguments, caller, length, name, prototype
함수 호출 시 전달된
인수(argument)
들의 정보를 담고 있는 순회 가능한 (iterable) 유사 배열 객체 , 함수 내부에서지역 변수
처럼 사용됨
function sum() {
let res = 0;
for (let index = 0; index < arguments.length; index++) {
res += arguments[index];
}
return res;
}
console.log(sum());
console.log(sum(1, 2));
console.log(sum(1, 2, 3));
함수를 정의할 때, 선언한 매개변수의 개수
arguments 객체의 length 프로퍼티 : 인자의 개수 (argument)
함수 객체의 length 프로퍼티 : 매개변수의 개수 (parameter)
함수의 이름
//기명 함수 표현식
var namedFunc = function foo() { }
console.log(namedFunc.name);
//익명 함수 표현식
var anonymousFunc = function () { };
console.log(anonymousFunc.name);
//함수 선언문
function bar() {}
console.log(bar.name);
const obj = { a: 1 };
console.log(obj.__proto__ === Object.prototype);
console.log(obj.hasOwnProperty('a'));
console.log(obj.hasOwnProperty('__proto__'));
console.log(obj)