es6 함수 의 끝 호출 최적화 사례 분석

본 고의 실례 는 es6 함수 의 끝 호출 최 적 화 를 서술 하 였 다.여러분 께 참고 하도록 공유 하 겠 습 니 다.구체 적 으로 는 다음 과 같 습 니 다.
무엇이 꼬리 호출 최적화 입 니까?
꼬리 호출 은 함수 식 프로 그래 밍 의 중요 한 개념 으로 그 자체 가 매우 간단 하 며 한 마디 로 분명하게 말 할 수 있다.즉,특정한 함수 의 마지막 단 계 는 다른 함 수 를 호출 하 는 것 을 말한다.

function f(x) {
 return g(x)
}

위의 코드 에서 함수 f 의 마지막 단 계 는 함수 g 를 호출 하 는 것 입 니 다.이것 을 꼬리 호출 이 라 고 합 니 다.
아래 세 가지 상황 은 모두 미 호출 에 속 하지 않 는 다.

//    
function f(x) {
 let y = g(x)
 return y
}
//    
function f(x) {
 return g(x) + 1
}
//    
function f(x) {
 g(x)
}

꼬리 호출 은 반드시 함수 끝부분 에 나타 나 는 것 이 아니 라 마지막 조작 만 하면 된다.

function f(x) {
 if (x > 0) {
  return m(x)
 }
 return n(x);
}

꼬리 호출 이 다른 호출 과 다른 이 유 는 특수 한 호출 위치 에 있다.
우 리 는 함수 호출 이 메모리 에'호출 기록'을 형성 하고 호출 프레임 이 라 고도 부 르 며 호출 위치 와 내부 변수 등 정 보 를 저장 한 다 는 것 을 알 고 있다.함수 A 의 내부 에서 함수 B 를 호출 하면 A 의 호출 프레임 위 에 B 의 호출 프레임 이 형성 된다.B 운행 이 끝나 면 결 과 를 A 로 되 돌려 야 B 의 호출 프레임 이 사라 집 니 다.함수 B 내부 에서 함수 C 를 호출 하면 C 의 호출 프레임 이 하나 더 있 습 니 다.모든 호출 프레임 이 호출 스 택 을 만 들 었 습 니 다.
꼬리 호출 은 함수 의 마지막 작업 이기 때문에 외층 함수 의 호출 프레임 을 보류 할 필요 가 없습니다.호출 위치,내부 변수 등 정 보 는 더 이상 사용 되 지 않 기 때문에 내층 함수 의 호출 프레임 을 직접 사용 하여 외층 함수 의 호출 프레임 을 대체 하면 됩 니 다.

function f() {
 let m = 1;
 let n = 2;
 return g(m + n);
}
f();

//    
function f() {
 return g(3);
}
f();

//    
g(3);

위의 코드 에서 함수 g 가 꼬리 호출 이 아니라면 함수 f 는 내부 변수 m 와 n 의 값,g 의 호출 위치 등 정 보 를 저장 해 야 합 니 다.그러나 g 를 호출 한 후에 함수 f 가 끝 났 기 때문에 마지막 단계 까지 실행 하면 f(x)의 호출 프레임 을 삭제 하고 g(3)의 호출 프레임 만 유지 할 수 있 습 니 다.
이것 은 바로'꼬리 호출 최적화'(Tail calloptimization)라 고 하 는데 내부 함수 의 호출 프레임 만 유지 하 는 것 이다.모든 함수 가 끝 호출 이 라면 실행 할 때마다 프레임 을 호출 하 는 것 은 하나 뿐 이 므 로 메모 리 를 크게 절약 할 수 있 습 니 다.이것 이 바로'꼬리 호출 최적화'의 의미 다.
외부 함수 의 내부 변 수 를 사용 하지 않 아야 내부 함수 의 호출 프레임 이 외부 함수 의 호출 프레임 을 대체 할 수 있 습 니 다.그렇지 않 으 면'꼬리 호출 최적화'를 할 수 없습니다.

function addOne(a){
 var one = 1;
 function inner(b){
  return b + one;
 }
 return inner(a);
}

관심 있 는 친 구 는 온라인 HTML/CSS/JavaScript 코드 실행 도 구 를 사용 할 수 있 습 니 다.http://tools.jb51.net/code/HtmlJsRun상기 코드 실행 효 과 를 테스트 할 수 있 습 니 다.
더 많은 자 바스 크 립 트 관련 내용 은 본 사이트 의 주 제 를 볼 수 있 습 니 다.
본 고 에서 말 한 것 이 여러분 의 자 바스 크 립 트 프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.

좋은 웹페이지 즐겨찾기