수신자
호출자는 객체의 속성으로, 인수 객체의 함수를 가리키는 포인터입니다.
먼저 주문 함수를 작성해 보겠습니다.
function chen(x){ if (x<=1) { return 1; } else{ return x*chen(x-1); }; };
이 함수에서 볼 수 있듯이, 함수 이름을 변경하면 내부의 함수 이름도 변경되는 것이 매우 불편하므로 호출자를 사용하여 시도해 보겠습니다.
function chen(x){ if (x<=1) {return 1; }else{ return x*arguments.callee(x-1); }; };
왜 이렇게 작성했는지 분석해 보겠습니다. callee의 정의에 따르면 callee는 인수 개체의 속성이며 인수 개체의 함수를 가리키는 것을 알 수 있습니다. 이 함수는 chen(chen=arguments. .callee) 이 설명은 이해하기 쉬울 것입니다.
발신자
caller는 현재 함수를 호출하는 함수에 대한 참조를 보유하는 함수 객체의 속성입니다(현재 함수의 직접적인 상위 함수를 가리킴)
먼저 예를 들어보겠습니다
function a(){ b(); }; function b(){ alert(b.caller); }; a(); //结果就是弹出函数a和内容
먼저 설명하자면, 함수 b의 속성 호출자는 현재 함수 b의 함수 참조 a(현재 함수 b의 상위 함수 a를 가리킴)를 호출하므로 결과는 함수 a()입니다. b();}; 팝업;
이제 발신자와 수신자를 이해했으므로 두 가지를 결합하여 사용할 수 있나요?
function b(){ alert(b.caller); };
이전에는 현재 객체를 가리키는 방법을 알았으므로 다음에는 수정해 보겠습니다.
(function a(){ b(); })(); function b(){ alert(arguments.callee.caller); };
위 내용은 이 글의 전체 내용입니다. 모두 마음에 드셨으면 좋겠습니다.