call, aplly, caller, callee 는 각각 무엇 입 니까?

call 과 aplly 의 차이 점:
개념:
call 과 apply 는 특정한 함수 가 실 행 될 때의 context 즉 문맥 을 바 꾸 기 위해 존재 합 니 다. 다시 말 하면 함수 체 내부 this 의 방향 을 바 꾸 기 위해 서 입 니 다.자 바스 크 립 트 의 함 수 는 '정의 시 상하 문' 과 '실행 시 상하 문', '상하 문 은 바 꿀 수 있다' 는 개념 이 존재 하기 때문이다.양자 의 작용 은 완전히 같 지만 파 라미 터 를 받 아들 이 는 방식 은 그다지 같 지 않다.
예 를 들 면:
함수 func 1 정 의 는 다음 과 같 습 니 다.
var func1 = function(arg1, arg2) {};
func 1. call (this, arg 1, arg 2) 을 통 해또는 func 1. apply (this, [arg 1, arg 2]);호출 하 다.
그 중에서 this 는 당신 이 지정 하고 자 하 는 컨 텍스트 입 니 다. 그 는 모든 자바 스 크 립 트 대상 (자바 스 크 립 트 의 모든 대상) 을 사용 할 수 있 습 니 다.
call 은 매개 변 수 를 순서대로 전달 해 야 하고 apply 는 매개 변 수 를 배열 에 넣 어야 합 니 다.
밤 하나 더 주세요.
javascript OOP 에서 우 리 는 항상 이렇게 정의 합 니 다.
function cat(){
} cat.prototype={ food:"fish", say: function(){ alert("I love "+this.food); } } var blackCat = new cat; blackCat.say();
그러나 만약 에 우리 에 게 whiteDog = {food: "bone"} 대상 이 있다 면 우 리 는 그것 에 대해 say 방법 을 다시 정의 하고 싶 지 않다. 그러면 우 리 는 call 또는 apply 를 통 해 BlackCat 의 say 방법: BlackCat. say. call (whiteDog) 을 사용 할 수 있다.따라서 콜 과 apply 는 this 를 동태 적 으로 바 꾸 기 위해 나타 난 것 임 을 알 수 있 습 니 다. 하나의 object 에 어떤 방법 이 없 지만 다른 것 은 콜 이나 apply 를 통 해 다른 대상 의 방법 으로 조작 할 수 있 습 니 다.많이 사용 되 는 document. getElement sByTagName 을 통 해 선택 한 dom 노드 는 array 와 유사 한 array 입 니 다.Array 의 push, pop 등 방법 을 사용 할 수 없습니다.
우 리 는 var domNodes = Array. prototype. slice. call (document. getElementsByTagName ("*") 을 통과 할 수 있 습 니 다.이렇게 하면 domNodes 는 Array 의 모든 방법 을 응용 할 수 있다.
caller 와 callee 의 차이 점:
caller 는 함수 의 인용 을 되 돌려 줍 니 다. 이 함 수 는 현재 함 수 를 호출 했 습 니 다.callee 는 실행 중인 함수 자체 의 인용 을 되 돌려 줍 니 다. 이것 은 arguments 의 속성 입 니 다.
caller : 
functionname. caler 호출 자 를 되 돌려 줍 니 다. 
코드 예제:
function caller() { 
if (caller.caller) { 
alert(caller.caller.toString()); 
} else { 
alert("      "); 
} 
} 
function handleCaller() { 
caller(); 
} 
handleCaller(); 
caller(); 

첫 번 째 alert 는 caller 함 수 를 호출 하 는 호출 자 handle Caller 를 팝 업 합 니 다. 두 번 째 alert 는 다른 함수 에서 호출 되 지 않 았 기 때문에 caller 는 null 이 고 alert ("함수 직접 실행") 를 실행 합 니 다. 
callee: 
실행 중인 Function 대상, 즉 지정 한 Function 대상 의 본문 을 되 돌려 줍 니 다. 
callee 는 arguments 의 속성 구성원 으로 함수 대상 자체 에 대한 인용 을 나타 내 며 익명 에 유리 합 니 다.
function calleeLengthDemo(arg1, arg2) { 
alert(arguments.callee.toString()); 
if (arguments.length == arguments.callee.length) { 
window.alert("           !"); 
return; 
} else { 
alert("    :" + arguments.length); 
alert("    : " + arguments.callee.length); 
} 
} 
calleeLengthDemo(1); 

첫 번 째 메시지 상자 에서 calleeLengthDemo 함수 자 체 를 팝 업 합 니 다. 이것 은 callee 가 함수 자체 대상 의 인용 임 을 설명 합 니 다.callee 는 실제 매개 변수 와 행 참 이 일치 하 는 지 판단 하 는 데 매우 유용 한 응용 프로그램 도 있다.위의 코드 첫 번 째 메시지 상 자 는 실제 매개 변수의 길이 가 1 이 고 형식 매개 변수, 즉 함수 자체 의 매개 변수 길이 가 2 입 니 다. 
응용 장면
: 
callee 의 응용 장면 은 일반적으로 익명 함수 에 사용 된다. 다음 코드 를 보 세 요. 
var fn=function(n){ 
if(n>0) return n+fn(n-1); 
return 0; 
} 
alert(fn(10)) 

함수 내부 에는 자신 에 대한 인용 이 포함 되 어 있 습 니 다. 함수 이름 은 하나의 변수 이름 일 뿐 함수 내부 에서 호출 하 는 것 은 호출 에 해당 합 니 다. 
전역 변 수 는 자신 을 호출 하 는 것 으로 잘 나타 나 지 않 습 니 다. 이때 callee 를 사용 하 는 것 이 좋 은 방법 입 니 다.
var fn=(function(n){ 
if(n>0) return n+arguments.callee(n-1); 
return 0; 
})(10); 
alert(fn) 

이렇게 하면 코드 를 더욱 간결 하 게 할 수 있다.전역 변수의 오염 을 방지 했다. 
caller 의 응용 장면 은 주로 함수 자체 가 어떤 함수 에 의 해 호출 되 었 는 지 관찰 하 는 데 사용 된다.

좋은 웹페이지 즐겨찾기