1⃣️ 재귀
계승 기능 :
함수 계승 (NUM) { 경우 (NUM <= 1 ) { 반환 1 ; } 다른 { 6 창 으로 num * 팩토리얼 (NUM- 1 ); } }
변형 예 (함수에 arguments.callee를 포인터가 수행되고, 디커플링)
함수 계승 (NUM) { 경우 (NUM <= 1 ) { 반환 1 ; } 다른 { 창 으로 num *의 arguments.callee를 (NUM- 1 ); }}
:() arguments.callee를 사용할 수 없습니다 변환이 개 엄격 모드를 해결
VAR의 계승 = (함수 f (NUM) { 경우 (NUM <= 1 ) { 반환 1 ; } 다른 { 창 으로 num *의 F (NUM- 1 ); }});
폐쇄 범위 체인 2⃣️
함수 createComparisonFunction (propertyName 형식) { 복귀 기능 (오브젝트 1, object2) { var에 VALUE1 = 오브젝트 1 [propertyName 형식]; VAR의 값 2 = object2 [propertyName 형식]; 경우 (값 < 값 2) { 창 - 1 ; } 다른 경우 (값 1> 값 2)이 { 반환 1 ; } 다른 { 반환 0 ; }
}; }
VAR = createComparisonFunction (비교 " 이름 " ); var에 결과 = 비교 ({이름 : " 니콜라스 " }, {이름 : " 그렉 " });
익명 함수가 목표 함수에 대한 범위 체인 액티브 오브젝트 및 전역 변수를 초기화하는 createComparisonFunction ()에서 리턴되면 createComparisonFunction를 포함한다 ().
따라서 범위 체인은 액티브 오브젝트 createComparisonFunction 함수 (로컬 기능과 로컬 속성, 상기 코드에 반영되지 않음) 및 글로벌 변수 오브젝트 아래의 예를 참조 비교 포함
VAR의 수 = 100 ; VAR의 A = 2 ; 함수 작성 () { VAR의 수 = 10 ; 복귀 함수 () { CONSOLE.LOG (카운트 + a); } }; VAR의 B는 = () 생성; 비();
B는 범위 체인 활성 객체 함수를 만드는 초기화 상술 한 바와 같이이, 폐쇄 전형적인 (= 10 카운트) 및 글로벌 변수 (a = 2 = 100 카운트) 때문에 B를 수행 () 시간 카운트 + A = 10 + 2 = 12;
왜 10 + 2, 대신에이 블로그 :? 100 + 2 봐 JS 범위 체인.