>  기사  >  웹 프론트엔드  >  javascript_javascript 스킬의 수신자와 호출자의 차이점 분석

javascript_javascript 스킬의 수신자와 호출자의 차이점 분석

WBOY
WBOY원래의
2016-05-16 16:03:131117검색

수신자

호출자는 객체의 속성으로, 인수 객체의 함수를 가리키는 포인터입니다.
먼저 주문 함수를 작성해 보겠습니다.

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);
};
이 코드를 보면 b 함수에서 b 함수 이름이 호출되는 것을 볼 수 있습니다. 이는 함수 이름이 변경될 때 매우 불편합니다.

이전에는 현재 객체를 가리키는 방법을 알았으므로 다음에는 수정해 보겠습니다.

(function a(){
b();
})();

function b(){
alert(arguments.callee.caller);
};

코드에서 볼 수 있듯이 b 함수를args.callee로 대체하여 문제가 해결되었습니다. . . . .

위 내용은 이 글의 전체 내용입니다. 모두 마음에 드셨으면 좋겠습니다.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.