JavaScript에서 'arguments.callee.caller'가 더 이상 사용되지 않는 이유는 무엇입니까?

DDD
풀어 주다: 2024-11-12 10:17:02
원래의
558명이 탐색했습니다.
Why Was `arguments.callee.caller` Deprecated in JavaScript? 
재귀의 필요성

早期 버전의 JavaScript에서는 명명된 함수 표현식이 지원되지 않았습니다. 이로 인해 재귀 함수 표현식을 작성하기가 어려워졌습니다.

예를 들어 계승 함수를 고려해보세요.

명명된 함수 표현식이 없으면 이 코드는 작동하지 않습니다. Arguments.callee 속성은 해결책을 제공했습니다.

Arguments.callee의 단점

[1,2,3,4,5].map(factorial);
로그인 후 복사
그러나args.callee에는 몇 가지 단점이 있었습니다.

[1,2,3,4,5].map(function(n) {
     return (!(n>1))? 1 : arguments.callee(n-1)*n;
 });
로그인 후 복사
인라인, 테일 재귀 등의 최적화를 방지했습니다.

재귀 호출 중에 this의 값을 변경했습니다.

ECMAScript 3의 솔루션
  • ECMAScript 3에는 명명된 함수 표현식이 도입되어 인수.callee가 필요하지 않습니다.
  • 예:

이 접근 방식은 인수.callee에 비해 몇 가지 장점을 제공합니다.

다른 함수와 마찬가지로 함수를 호출할 수 있습니다.

네임스페이스를 오염시키지 않습니다.

[1,2,3,4,5].map(function factorial(n) {
     return (!(n>1))? 1 : factorial(n-1)*n;
 });
로그인 후 복사
재귀 호출 내에서 이 무결성을 유지합니다.

인수 객체에 액세스하는 오버헤드를 제거하여 성능을 향상시킵니다.
  • 결론
  • arguments.callee.caller의 지원 중단은 JavaScript의 개선에 필수적이었습니다. 최적화 기능 및 함수 호출 중 일관된 동작 보장. 명명된 함수 표현식은 재귀 및 호출 컨텍스트 액세스를 위한 보다 안정적이고 효율적인 대안을 제공합니다.

위 내용은 JavaScript에서 'arguments.callee.caller'가 더 이상 사용되지 않는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿