키워드: 인수, 피호출자, 호출자
인수: 함수에 전달된 매개변수를 나타냅니다.
피호출자: 함수 및 함수 본문을 나타내는 문
호출자: 함수를 호출하는 함수를 나타냅니다.
인수
이 객체는 실행 중인 함수와 이를 호출하는 함수의 매개변수를 나타냅니다.
방문객
현재 함수를 호출한 함수에 대한 참조를 반환합니다.
functionName.caller
functionName 객체는 실행된 함수의 이름입니다.
설명하다
함수의 경우 호출자 속성은 함수가 실행될 때만 정의됩니다. 함수가 최상위 수준에서 호출되면 호출자에는 null이 포함됩니다. 호출자 속성이 문자열 컨텍스트에서 사용되는 경우 결과는 functionName.toString과 동일합니다. 즉, 함수의 디컴파일된 텍스트가 표시됩니다.
수신자
지정된 Function 객체의 본문인 실행 중인 Function 객체를 반환합니다.
[함수.]arguments.callee
선택적 함수 매개변수는 현재 실행 중인 Function 개체의 이름입니다.
설명하다
호출 수신자 속성의 초기 값은 실행 중인 Function 개체입니다.
피호출자 특성은 인수 개체의 멤버입니다. 이는 익명 함수의 재귀 또는 함수 캡슐화에 도움이 되는 함수 개체 자체에 대한 참조를 나타냅니다. 예를 들어 다음 예제에서는 자연계의 합을 재귀적으로 계산합니다. 1부터 n까지의 숫자. 이 속성은 해당 기능이 실행 중일 때만 사용할 수 있습니다. 또한 호출 수신자에게는 길이 속성이 있으며 때로는 확인에 더 적합하다는 점에 유의해야 합니다. args.length는 실제 매개변수 길이이고,args.callee.length는 형식 매개변수 길이이며, 이를 통해 호출 시 형식 매개변수 길이가 실제 매개변수 길이와 일치하는지 확인할 수 있습니다.
다음과 같이 코드 코드를 복사합니다.
<스크립트 유형='텍스트/자바스크립트'>
기능 테스트(x,y,z)
{
Alert("실제 매개변수 길이:"+arguments.length);
Alert("공식 매개변수 길이:"+arguments.callee.length);
Alert("정식 매개변수 길이:"+test.length);
경고(인수[ 0 ])
Alert(test[ 0 ]) // 정의되지 않은 경우에는 그러한 사용법이 없습니다.
}
//테스트(1,2,3);
테스트(1,2,3,4);
/*
* 인수가 배열이 아닙니다(Array 클래스).
*/
Array.prototype.selfvalue = 1;
함수 testAguments() {
경고( "args.selfvalue= " + 인수.selfvalue);
}
Alert("Array.sefvalue="+new Array().selfvalue);
테스트Aguments();
/**/ /*
* 함수의 호출자 속성을 보여줍니다.
* 설명: (현재 함수).caller: 현재 함수를 호출한 함수에 대한 참조를 반환합니다.
*/
함수 callerDemo() {
if (callerDemo.caller) {
var a = callerDemo.caller.arguments[ 0 ];
경고(a);
} 또 다른 {
Alert( " 이것은 최상위 함수입니다 " );
}
}
함수 핸들콜러() {
호출자데모();
}
호출자데모();
handlerCaller("매개변수 1", "매개변수 2");
/**/ /*
* 함수의 호출 수신자 속성을 보여줍니다.
* 설명:args.callee: 초기값은 실행 중인 Function 객체로, 익명 함수에 사용됩니다.
*/
함수 calleeDemo() {
경고(arguments.callee);
}
피호출자Demo();
(function(arg0,arg1){alert("도형의 개수는 다음과 같습니다: "+arguments.callee.length)})();
/**/ /*
* 적용 및 통화 기능 사용법 시연
* 참고: 함수는 실행할 다른 개체에 함수를 바인딩하는 것입니다. 둘 사이의 유일한 차이점은 매개 변수를 정의하는 방법입니다.
* 적용(thisArg,argArray);
* call(thisArg[,arg1,arg2…] ]);
* 즉, 모든 함수 내부의 this 포인터에는 thisArg가 할당됩니다.
*/
함수객체A() {
Alert( "ObjectA() 실행 " );
경고(인수[ 0 ]);
this .hit = 함수 (msg) {alert(msg)}
this .info = "저는 ObjectA 출신입니다."
}
함수객체B() {
Alert( "ObjectB() 실행 " );
// ObjectA() 메서드를 호출하면 ObjectA 생성자의 모든 항목이 ObjectB의 this로 대체됩니다.
ObjectA.apply( this ,arguments); // ObjectA.call(this);
경고(이 .info);
}
ObjectB('매개변수 0');
var value = "전역변수";
함수 Obj() {
this .value = "개체!";
}
함수 Fun1() {
경고(this .value);
}
재미1();
Fun1.apply(창);
Fun1.apply(new Obj());
</script>