[JS] 함수 객체의 프로퍼티

Jay ·2022년 4월 29일
0

arguments, caller, length, name, prototype

일반 객체에는 없는 함수 객체의 고유 프로퍼티.

단, proto는 접근자 프로퍼티로 함수 객체 고유의 프로퍼티가 아니라 Object.prototype 객체의 프로퍼티를 상속받은 것이다.

1. Arguments

arguments 객체는 함소 호출 시 전달된 인수들의 정보를 담고 있는 순회 가능한(iterable) 유사 배열 객체이며 함수 내부에서 지역 변수처럼 사용된다. (함수 외부에서 참조 불가능)

함수 객체의 프로퍼티는 ES3부터 표준에서 폐지.
따라서 Function.arguments와 같은 방법은 권장되지 않는다

또한 자바스크립트는 함수의 매개변수와 인수의 개수가 일치하는지 확인하지 않으므로 갯수가 일치하지 않아도 에러가 발생하지 않는다.

fuction multiply(x,y){
	console.log(arguments);
    return x*y;
    }
    
console.log(multiply());
console.log(multiply(1));
console.log(multiply(1,2,3));

인수가 전달되지 않은 매개변수는?
더 많이 전달된다면?

arguments 객체는 calle, length, Symbol, proto를 프로퍼티로 가진다.
(Symbol 프로퍼티는 arguments객체를 iterable로 만들기 위한 프로퍼티이다.)

1-1 arguments의 활용방법?

가변 인자 함수를 구현할 때 유용하다.

function sum() {
	let res = 0;
    
    for (let i =0; i < arguments.length; i++) {
    res += arguments[i];
    }
    
    return res;
}
console.log(sum(1,2,3))

이터러블 개념이 없던 ES5에서 arguments 객체는 유사 배열 객체였지만,
이터러블이 도입된 ES6부터 arguments 객체는 유사 배열 객체이면서 동시에 이터러블이다.

1-2 Rest 파라미터의 도입

ES6에서 rest 파라미터가 도입되었기 때문에
arguments 객체의 중요성이 이전 같지는 않지만, ES6 이전의 환경에서는 여전히 유용하다.

fuction sum(... args) {
	return args.reduce((pre, cur) => pre + cure, 0);
}

2. caller

EXMAScript 사양에 포함되지 않는 비표준 프로퍼티.
자신을 호출한 함수를 가리킨다.
무시해도 좋음.

3. length

함수를 정의할 때 선언한 매개변수의 개수를 가리킨다.

arguments의 length 프로퍼티는 인자의 개수를 가리키고, 함수 객체의 length 프로퍼티는 매개변수의 개수를 가리키는 점에서 차이가 있다.

fuction baz(x,y) {
	return x*y;
}
console.log(baz.length)

4. name

함수의 이름을 나타내는 프로퍼티.
ES6이전까지는 비표준이었다가 ES6부터 정식표준이 되었다.

// 기명 함수 표현식
let namedFunc = function foo() {};
console.log(namesFunc.name // foo

//익명 함수 표현식
let anonymousFunc = function() {};
console.log(anonymousFunc.name); // anonymousFunc

// 함수 선언문
function bar() {}
console.log(bar.name) // bar
profile
Jay입니다.

0개의 댓글