[모던JS입문] 8.8 객체로서의 함수

Bora Im·2020년 3월 29일
0

모던JS입문

목록 보기
2/8

8.8.1 함수는 객체
8.8.2 함수의 프로퍼티
8.8.3 apply와 call 메서드
8.8.4 bind 메서드
8.8.5 함수에 프로퍼티 추가

8.8.1
JS에서 함수는 Function 객체, 일급 객체(일급 함수)

  • 변수, 프로퍼티, 배열 요소에 대입할 수 있다.
  • 함수의 인수
  • 함수의 반환값
  • 프로퍼티와 메서드를 가질 수 있다.
  • 이름 없는 리터럴로 표현할 수 있다. (익명함수)
  • 동적으로 생성할 수 있다.

8.8.2
caller 현재 실행 중인 함수
length 함수의 인자 개수
name 함수 이름
prototype 프로토타입 객체의 참조

Function 생성자의 prototype 객체(Function.prototype)의 프로퍼티
apply() 선택한 this와 인수를 사용하여 함수를 호출. 인수는 배열 객체
call() 선택한 this와 인수를 사용하여 함수를 호출. 인수는 쉼표로 구분한 값
bind() 선택한 this와 인수를 적용한 새로운 함수를 반환
constructor Function 생성자의 참조
toString() 함수의 소스코드를 문자열로 반환

8.8.3
Function 객체의 메서드. this 값과 함수의 인수를 사용해 함수를 실행하는 메서드.
1번째 인수는 함수의 this
apply의 2번째 인수는 함수의 인수를 담은 배열
call의 2번째 이후 인수는 함수의 인수 목록

function say(greeting,honorifics) {
	console.log(greetings+" "+honorifics+this.name);
}
var tom = {name: "Tom"};
var becky = {name: "Becky"};
say.apply(tom, ["Hello", "Mr."]); // Hello Mr.Tom
say.call(becky, "Hi", "Ms."); // Hi Ms.Becky

8.8.4
Function 객체의 메서드. 객체에 함수를 바인드

function say(greeting,honorifics) {
	console.log(greetings+" "+honorifics+this.name);
}
var tom = {name: "Tom"};

var sayToTom = say.bind(tom);
sayToTom("Hello", "Mr."); // Hello Mr.Tom

sayToTom 함수를 호출하면 this는 무조건 객체 tom
tom 객체를 say의 this 로 설정한 새로운 함수를 만들어 반환

8.8.5 함수의 프로퍼티

function f(x) {
f.p = a;
f.g = function() {};

Function 객체의 프로퍼티는 함수를 실행하지 않아도 읽거나 쓸수 있다.
전역 변수는 전역 유효 범위를 오염시키므로
그 함수와 관련된 데이터나 메서드를 함수의 프로퍼티로 작성하면 함수 객체가 이름 공간의 역할!

메모이제이션(Memoization)
함수를 호출했을때 인수와 반환값을 한쌍으로 만들어 저장해두는 기법
한번 건네받은 이력이 있는 인수의 결괏값으로 저장해둔 결과를 반환 : 계산 생략

0개의 댓글