TIR: 완벽가이드 1-2. 코어자바스크립트 함수(2)- 220703

Lumpen·2022년 7월 3일
0

TIR

목록 보기
15/40

함수 간접 호출

자바스크립트의 함수는 객체이고, 모든 자바스크립트 객체와 같이 함수에도 메소드가 있다
그 중 call()과 apply()는 함수를 간접적으로 호출한다
두 메소드 모두 this 값을 명식적으로 지정할 수 있는데,
어떤 함수든지 특정 객체의 메소드로 호출할 수 있다는 뜻이다
심지어 함수가 그 객체에 속하지 않더라도 가능하다

call() 메소드는 자신에게 주어진 전달 인자를 호출할 함수의 전달 인자로 사용하고 apply()
메소드는 값 배열을 전달 인자로 사용한다

함수 전달인자와 매개변수

자바스크립트에서 함수를 정의할 때는 함수 매개변수의 타입(자료형)을 명시하지 않는다
함수를 호출할 때도 전달하는 인자 값을 검사하지 않고, 심지어 전달인자의 개수도 검사하지 않는다

생략 가능한 매개변수

정의된 것 보다 적은 수의 전달 인자로 호출 시,
나머지 매개변수는 undefined로 설정된다

가변 길이 전달 인자 목록: Arguments 객체

함수가 호출될 때 정의된 매개변수 보다 더 많이 인자가 전달되면,
매개변수 이름이 붙지 않은 인자 값을 직접적으로 참조할 방법은 없다
Arguments 객체는 이런 문제에 대한 해결책이다
Arguments 객체는 유사 배열 객체고, 인데스 번호로 함수의 전달 인자를 얻을 수 있다
Arguments 객체도 length 프로퍼티를 가지고 있다

임의 개수의 전달 인자를 받을 수 있는 함수를 보통 varargs 함수 등으로 부른다
arguments는 배열이 아니라 Arguments 객체다
배열 메소드를 사용할 수 없음

arguments를 매개변수 이름이나 지역 변수 이름이나 지역변수 이름으로 사용할 수 없다
그리고 어떤 값을 할당할 수도 없다

calle와 caller 속성

Arguments 객체는 배열 원소 외에도 calle와 calleer 프로퍼티를 정의하고 있다
읽거나 쓸 수 없다
callee 프로퍼티가 현재 실행되고 있는 함수를 참조한다고 정의하고 있다
caller는 비표준이지만 많은 자바스크립트 구현체에 보편적으로 구현된 프로퍼티며, 호출한 함수를 참조한다
caller 프로퍼티는 호출 스택에 접근할 수 있도록 해주고, callee 프로퍼티는 이름 없는 함수를 재귀적으로
호출하는데 유용하다

const factorial = function(x) {
  if(x <= 1) return 1;
  return x * arguments.callee(x-1);
}

객체의 프로퍼티를 전달인자로 사용하기

함수에 세 개 이상의 매개변수가 있다면, 호출하는 순서를 기억하기 어렵다
이럴 경우 전달 인자를 순서에 상관 없이 이름/값의 쌍으로 함수에 전달하는 편이 효과적일 수 있다

전달인자 형식

자바스크립트 메소드의 매개변수에는 정의된 형식도 없고, 함수에 전달한 값에 대해
자료형 검사를 하지 않는다
한두 번 사용하고 버릴 함수가 아니라면 자료형 검사를 하는 코드를 추가하는 것이 좋다
-> 타입 스크립트 쓰면 됨

값으로서의 함수

함수의 가장 중요한 특징은 정의될 수 있고 또 호출될 수 있다는 점이다
함수 정의와 호출은 자바스크립트 뿐만 아니라 대부분 프로그래밍 언어의 문법의 특징이다

자바스크립트에서 함수는 문법일 뿐만 아니라 값이기도 하다
함수가 변수에 할당될 수 있고, 객체의 프로퍼티나 배열 원소로 저장될 수 있으며, 다른 함수의 인자로 전달될 수도 있고, 여러 방식으로 사용될 수 있음을 뜻한다

함수가 자바스크립트 문법일 뿐만 아니라 자바스크립트 데이터도 될 수 있다

값으로서의 함수 예시

값으로서의 함수 예시로는 Array.sort() 메소드를 들 수 있다
sort() 메소드는 정렬을 어떻게 할지 알려주는 함수를 선택적 인자로 받는다
때문에 sort() 메소드는 일반화 되고 한없이 유연해질 수 있다
어떤 형식에 데이터라도 상상하는 모든 순서로 정렬할 수 있다

profile
떠돌이 생활을 하는. 실업자는 아니지만, 부랑 생활을 하는

0개의 댓글