TIL

0l0l·2021년 4월 12일
0

TIL

목록 보기
9/86

1. 클로저(closure)

내부함수가 외부함수의 맥락(context)에 접근할 수 있는 것
외부함수가 return문으로 인해 함수가 종료되어도 내부함수가 외부함수의 변수에 접근 할 수 있음을 의미

동일한 외부함수 안에서 만들어진 내부함수나 메소드는 외부함수의 지역변수를 공유
외부함수가 실행될 때마다 새로운 지역변수를 포함하는 클로저가 생성되므로 독립된 객체가 가능

외부함수의 지역변수는 객체의 메소드에서만 접근할 수 잇는 값으로 지역변수를 읽고 수정할 수 있는 것은 메소드를 통해서 만들어진 객체 뿐이다.

  • Private 속성: 객체의 외부에서는 접근할 수 없는 속성이나 메소드
    객체의 내부에서만 사용해야 하는 값이 노출됨으로서 생길 수 있는 오류를 줄일 수 있다.

현재로는 이러한 개념이 있는 정도로 알고, 큰 프로젝트나 협업 시 꼭 필요하고 알아야 할 내용임을 알자!

2. arguments

함수 안에서 사용할 수 있도록 그 이름이나 특성이 약속되어 있는 일종의 배열
유사 배열이고 즉, arguments 객체의 인스턴스로
이 배열에는 함수를 호출할 때 입력한 인자가 담겨있다.

arguments라는 유사 배열을 이용해 함수의 정의부분에 매개변수가 없어도 인자를 전달할 수 있다.

  • arguments[0] : 함수로 전달된 첫번째 인자
  • arguments.length: 함수로 전달된 인자의 개수
  • (+ 함수.length : 함수에 정의된 인자의 수)
    함수로 전달된 인자의 개수가 함수에 정의된 매개변수 개수가 같으면 (에러 발생하지 않고) 함수가 실행되도록 구현할 수 있음
  • arguments[i] 를 반복문을 이용해 함수로 전달된 인자의 값을 순차적으로 가져와 합계를 구할 수 있다.

3. apply

일반적인 함수를 호출하는 방법

function func() {

}
func();

함수 func는 Function이라는 객체의 인스턴스이므로
func는 객체 Function이 가지고 있는 메소드들을 상속하고 있음

그 중 내장 메소드 apply 를 이용해 함수를 호출할 수 있다.
문법 => func.apply(context, arguments)
첫번째 인자 context: 함수가 실행될 맥락
두번째 인자 arguments: 유사배열객체에 담겨있는 원소가 함수의 인자로 순차적으로 대입

function sum(arg1, arg2){ // arg1 <- 1, arg2 <- 2
    return arg1 + arg2;
}
alert(sum.apply(null, [1,2]));

첫번째 인자가 null일 때 apply를 사용하는 것은 효율적이지 않음
(apply가 실행된 함수 인스턴스는 전역객체를 맥락으로 실행됨)

func이라는 함수가 호출되는 그 시점에서 함수의 'this' 값을 프로그래밍적으로 변경해서
마치 func 함수가 인자에 들어가는 값인 객체의 속성인 것처럼 실행되게 할 수 있음

JavaScript에서 함수는 독립적인 객체로서 존재하고, apply 메소드를 통해서 다른 객체의 소유물인 것처럼 실행할 수 있다.

profile
천방지축 빙글빙글

0개의 댓글