Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 다익스트라 알고리즘
- 세마포어와 뮤텍스
- floyd-warshall
- 싸피 합격
- 호스팅이란?
- 프록시서버
- 동기화
- 세마포어와 뮤텍스의 차이
- 플로이드 워셜
- 프록시
- 뮤텍스
- 클라우드 서버
- Proxy
- 삼성 청년 SW 아카데미
- Proxy Server
- 서버 호스팅
- 싸피
- SSAFY
- 플로이드 와샬
- 뮤텍스란?
- 세마포어
- 세마포어란?
- Dijkstra Algorithm
- Synchronization
- 최단 경로
- 호스팅
- 웹 호스팅
- 다익스트라
- 싸피 면접 후기
Archives
- Today
- Total
어제의 나보다 성장한 오늘의 나
[자바스크립트] arguments객체 본문
함수의 기본적인 기능은 당연히 함수를 호출하여 코드를 실행하는 것이다. 하지만 자바스크립트 언어 자체가 엄격한 문법 체크를 하지 않는 자유로운 특성의 언어이므로 함수 호출 또한 다른 언어와 달리 자유롭다.
arguments객체
- 함수를 호출할 때 함수 형식에 맞춰 인자를 넘기지 않더라도 에러가 발생하지 않는다.
- 예제로, func()는 arg1, arg2 두 개의 인자를 전달받아 콘설에 출력하는 간단한 기능 함수다.
function func(arg1, arg2){
console.log(arg1, arg2);
};
func(); // undefined
func(1); // 1
func(1,2); // 1, 2
func(1,2,3); // 1, 2
- func() 함수를 인자 개수를 달리해서 호출했다.
- C언어의 경우 2개의 인자를 넘기지 않고 호출했을 경우 바로 에러가 난다.
- 하지만 자바스크립트에서는 인자를 어떻게 넘기더라도 함수를 호출할 때 에러가 발생하지 않는다.
- 넘겨지지 않은 인자에는 undefined 값이 할당되고, 이와 반대로 정의된 인자 개수보다 많게 함수를 호출했을 경우는 에러가 발생하지 않고, 초과된 인수는 무시된다.
이러한 특성 때문에 함수 코드를 작성할 때, 런타임 시에 호출된 인자의 개수를 확인하고 이에 따라 동작을 다르게 해줘야 할 경우가 있다. 이를 가능케 하는 게 바로 arguments 객체이다. 함수를 호출할 때 인수들과 함께 암묵적으로 arguments 객체가 함수 내부로 전달되기 때문이다. arguments 객체는 함수를 호출할 때 넘긴 인자들이 배열 형태로 저장된 객체를 의미한다. 특이한 점은 이 객체는 실제 배열이 아닌 유사 배열 객체라는 점이다.
<!DOCTYPE html>
<html>
<head>
<script>
function add(a,b){
console.dir(arguments);
return a+b;
};
console.log(add(1)); // NaN
console.log(add(1,2)); // 3
console.log(add(1,2,3)); // 3
</script>
</head>
<body>
</body>
</html>
- add() 함수 내부에서 arguments 객체를 출력한다.
- arguments 객체는 다음과 같이 세 부분으로 구성되어 있다 (__proto__ 프로퍼티는 제외)
- 함수를 호출할 때 넘겨진 인자 (배열 형태)
- length 프로퍼티 : 호출할 때 넘겨진 인자의 개수를 의미
- callee 프로퍼티 : 현재 실행 중인 함수의 참조값 ( add() 함수 )
- 앞서 얘기했듯이 arguments는 객체이지 배열이 아니다.
- 배열 메서드를 사용할 경우 에러가 발생한다는 것에 주의해야 한다.
- 물론 유사 배열 객체에서 배열 메서드를 사용하는 방법이 있다. call과 apply 메서드를 이용한 명시적인 this 바인딩이다,
argument 객체는 매개변수 개수가 정확하게 정해지지 않은 함수를 구현하거나, 전달된 인자의 개수에 따라 서로 다른 처리를 해줘야 하는 함수를 개발하는데 유용하게 사용할 수 있다.
출처
'공부 > JavaScript && jquery' 카테고리의 다른 글
[자바스크립트] call과 apply (0) | 2021.04.16 |
---|---|
[자바스크립트] 호출패턴과 this 바인딩 (1) | 2021.04.15 |
[자바스크립트] 콜백함수, 즉시 실행 함수, 내부함수 (0) | 2021.04.13 |
함수 객체의 기본 프로퍼티 (0) | 2021.04.10 |
자바스크립트에서는 함수도 객체다, 함수 객체의 기본 프로퍼티 (0) | 2021.04.10 |
Comments