인수 정의
모든 함수에는 함수가 선언 될 때 정의 된 매개 변수 목록에 제한되지 않고 실제로 수신하는 매개 변수를 저장하기위한 자체 인수 개체가 있습니다. 배열은 아니지만 배열과 유사합니다. 배열과 동일한 액세스 속성 및 메소드가 있습니다. 인수 [n]에 의해 해당 단일 매개 변수의 값에 액세스 할 수 있으며 배열 길이 속성 길이를 가질 수 있습니다. 그러나 배열이없는 몇 가지 방법이 있습니다. 통화를 통해 인수를 실제 배열로 변환 한 다음 배열 작업을 수행 할 수 있습니다.
var args = array.prototype.slice.call (인수);
클래스 배열
1. 인수가 배열인지 여부를 결정하십시오
경고 (인수 인스턴스 배열); 경고 (인수 인스턴스 객체);
2. 데이터가 배열 (배열) 클래스의 인스턴스인지 엄격하게 결정하는 방법
함수 isArray (value) {if (typeof array.isArray === "function") {return array.isArray (value); } else {return object.prototype.toString.call (value) === "[객체 배열]"; }}3. 인수를 배열로 변환하십시오
방법 1 : 내장 유형은 프로토 타입을 통해 찾을 수 있습니다. Array.prototype.slice는 배열에 액세스하기위한 내장 메소드 슬라이스입니다. 슬라이스 방법을 통해 배열을 반환하십시오. Call은 객체를 호출하고 현재 객체를 다른 객체로 대체하는 메소드입니다.
var arg = array.prototype.slice.call (Arguments, 0);
방법 2 : 성능은 먼저 배열을 생성 한 다음 진행되기 때문에 방법 1보다 나쁩니다.
var arg = [] .slice.call (인수, 0);
방법 3 : 루프를 통해 배열로 변환합니다
function toArray (인수) {var a = []; for (var i = 0; i <arguments.length; i ++) {a.unshift (arguments. [i]); } return a;}방문객
다른 함수에 의해 함수가 호출되면 호출 된 함수는 호출자 속성을 자동으로 생성하여 호출하는 함수 객체를 가리 킵니다. 함수가 호출되지 않으면 발신자가 NULL입니다.
함수 testCaller () {var caller = testCaller.Caller; alert (caller);} 함수 acaller () {testCaller ();} acaller ();팝업은 기능 Acaller의 내용입니다.
arguments.callee
arguments.callee는 실행중인 함수 자체를 가리키고 실행중인 함수 객체, 즉 지정된 함수 객체의 본문을 반환합니다.
참고 : arguments.length는 실제 매개 변수의 길이입니다. arguments.callee.length는 공식 매개 변수의 길이이며 일반적으로 실제 매개 변수의 길이가 일관되는지 여부를 결정하는 데 사용됩니다.
인수를 통해 함수의 실제 매개 변수를 얻고 argument.callee를 통해 함수의 공식 매개 변수를 얻으십시오.
또한 폐쇄에 널리 사용됩니다.
var i = 0; 함수 b (num) {if (num <10) {num ++; i ++; // 매개 변수가 있으면 Callee도 매개 변수를 가져와야합니다. arguments.callee (num); } else {// output 2 alert ( "호출"+i+"callee!"); }} b (8); arguments.callee in closures의 적용은 재귀 적으로 부름의 함수를 제공합니다. // arguments.callee를 사용하여 10의 요인을 계산합니다. x * arguments.callee (x -1) : 1} (10); // output 6 alert (c (3)); // 출력 3628800 ALERT (C (10));예 : Callee는 1-n의 합을 찾습니다
함수 fn (n) {if (n == 1) return n; 그렇지 않으면 n+arguments.callee (n-1);} 반환익명 기능을 호출 할 수 있습니다
예:
함수 목록 (유형) {var result = "<"+type+"l> <li>"; var args = array.prototype.slice.call (인수, 1); 결과 += args.join ( "</li> <li>"); 결과+= "</li> </"+type+"l>"; return result;} var listhtml = list ( "o", "one", "two"); Console.log (listhtml);예제 2 : 인터뷰 질문 : 다음 콘솔 .LOG 결과는 무엇입니까 [1,2,3,4]?
함수 foo (x) {console.log (인수); return x;} foo (1,2,3,4); 함수 foo (x) {console.log (Arguments); 반환 x;} (1,2,3,4)사전 탐색 동안 함수 fn () {} (1); 개별적으로 처리되고 두 가지 함수로 나뉩니다. 첫 번째는 함수 fn () {}이고 두 번째는 익명 함수입니다 : (1). 두 번째에 매개 변수가 없으면 오류 가보고되지만 위의 함수는 A ()에 포함되어 있습니다.
(함수 fn () {console.log (arguments);} (1,2,3,4)); (함수 foo (x) {console.log (arguments); return x;}) (1,2,3,4) 함수 foo () {bar.apply (null, arguments);} 함수 바 (x) {arguments); 4);