call, aplly, caller, callee 는 각각 무엇 입 니까?
3528 단어 JavaScriptcallcallercalleeaplly
개념:
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 의 응용 장면 은 주로 함수 자체 가 어떤 함수 에 의 해 호출 되 었 는 지 관찰 하 는 데 사용 된다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
기초 정리 - 1문자 (String) 숫자 (Number) 불린 (Boolean) null undefined 심볼 (Symbol) 큰정수 (BigInt) 따옴표로 묶어 있어야 함 Not-A-Number - 숫자 데이터 / 숫자로 표...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.