1. 논쟁이란 무엇입니까?
인수는 JavaScript의 내장 객체이지만 종종 간과되지만 실제로는 매우 중요합니다. 모든 주요 JS 기능 라이브러리는 인수 객체를 사용합니다. 따라서 JavaScript 프로그래머가 익숙해 지려면 Agruments 객체가 필요합니다.
모든 함수에는 자체 인수 객체가 있으며 여기에는 함수에 의해 호출 될 매개 변수가 포함됩니다. 인수 유형을 사용하는 경우 배열이 아닙니다. 리턴은 '개체'입니다. 데이터를 호출하여 인수를 호출 할 수 있지만. 예를 들어, 길이 및 색인 방법. 그러나 배열의 푸시 및 팝 객체는 적용되지 않습니다.
2. 유연한 기능을 만듭니다
인수 객체는 사용에 매우 제한된 것으로 보이지만 실제로는 매우 유용한 객체입니다. 인수 객체를 사용하여 함수가 무기한 수의 매개 변수를 호출 할 수 있습니다. Dean Edwards의 Base2 라이브러리에는 이러한 유연성을 보여주는 형식의 기능이 있습니다.
다음과 같이 코드를 복사합니다. 함수 형식 (String) {
var args = 인수;
var pattern = new regexp ( "%([1-" + arguments.length + "]") ","g ");
return string (string) .replace (패턴, 함수 (일치, 인덱스) {
반환 Args [index];
});
};
"%1"에서 "%9"에서 "%1"을 사용하여 자리 표시자를 반환 값에 추가 할 수있는 템플릿 문자열을 제공합니다. 그런 다음 삽입 할 9 가지 다른 매개 변수를 제공하십시오.
코드 사본은 다음과 같습니다. 형식 ( "및 %1은 %2 you %3 ″,"종이 ","셔츠 ","마모 ")를 알고 싶어합니다.
위의 코드는 반환됩니다. 종이는 누구 셔츠를 입고 있는지 알고 싶어합니다. "
기능을 정의 할 때는 하나의 매개 변수 만 지정해야합니다. JavaScript를 사용하면이 기능을 어떻게 정의하든 상관없이 여러 매개 변수를 함수로 전달할 수 있습니다. 인수 객체가 허용됩니다.
3. 인수 객체를 실제 배열로 변환하십시오
인수 객체는 실제 JavaScript 배열이 아니지만 표준 데이터로 쉽게 변환 한 다음 배열 작업을 수행 할 수 있습니다.
코드 사본은 다음과 같습니다. var args = array.prototype.slice.call (arguments);
이제이 변수 args에는 함수의 모든 매개 변수를 포함하는 표준 JavaScript 배열 객체가 포함되어 있습니다.
4. 사전 설정 인수 객체를 통해 기능을 만듭니다
인수 객체를 사용하면 모든 유형의 JavaScript 메소드를 실행할 수 있습니다. 다음은 makefunc 기능의 정의입니다. 이 기능을 사용하면이 기능의 기능 참조 및 모든 매개 변수를 제공 할 수 있습니다. 지정한 함수를 호출하기 위해 익명 함수를 반환하고 익명 함수 호출에 첨부 된 매개 변수를 제공합니다.
다음과 같이 코드를 복사하십시오 : function makefunc () {
var args = array.prototype.slice.call (인수);
var func = args.shift ();
return function () {
return func.apply (null, args.concat (array.prototype.slice.call (arguments)));
};
}
첫 번째 인수 객체는 MakeFunc에게 호출하려는 함수에 대한 참조를 제공합니다. 그는 인수 배열에서 그것을 제거했습니다. 그런 다음 makefunc은 익명 함수를 반환하여 지정된 메소드를 실행합니다.
첫 번째 응용 프로그램의 인수는 주로 함수의 주요 부분에 의해 지적 된 함수 호출 범위를 가리 킵니다. 이것을 먼저 null로 유지합시다. 두 번째 인수는이 함수의 인수 객체로 변환 될 배열입니다. MakeFunc은 원래 배열 값을 인수 객체와 호출 된 함수의 배열로 연결합니다.
템플릿을 참조 할 때마다 항상 형식 함수를 호출하지 않도록 항상 동일한 위치 인 템플릿을 출력해야합니다. makefunc의 일반적인 기능을 사용하여 형식을 호출하고 템플릿을 자동으로 보충 할 수있는 반환 함수를 반환 할 수 있습니다.
코드 사본은 다음과 같습니다. var mavortom = makefunc (형식, "이것은 주요 톰에서 지상 통제입니다. %1입니다.");
다음과 같은 대형 기능을 호출 할 수 있습니다.
코드 사본은 다음과 같습니다. Majortom ( "문을 통과하는");
Majortom ( "가장 독특한 방식으로 떠 다니는");
Mavortom을 호출 할 때마다 형식 기능과 첫 번째 인수를 동시에 호출하며 이미 작성된 템플릿을 호출합니다. 그러면 돌아올 것입니다
코드를 다음과 같이 복사하십시오. "이것은 지상 통제의 주요 톰입니다. 문을 밟고 있습니다."
"이것은 지상 통제의 소령입니다.
5. 자체를 참조하는 함수를 만듭니다
이것이 시원하다고 생각할 수도 있지만 논쟁에는 더 많은 놀라움이 있습니다. 그는 다른 유용한 기능이 있습니다 : Callee 방법. arguments.callee에는 인수 객체를 생성하는 함수에 대한 참조가 포함되어 있습니다. 그래서 그것을 사용하는 방법?
arguments.callee 메소드를 사용하면 익명 기능이 매우 편리하게 지적 할 수 있습니다.
반복은 함수 참조와 두 숫자를 전달하는 함수입니다. 첫 번째 숫자는 함수가 호출되는 횟수이고 두 번째 숫자는 각각의 통화 간의 구간, 밀리 초입니다.
코드 사본은 다음과 같습니다. 함수 반복 (fn, times, delay) {
return function () {
if (times> 0) {
fn.apply (null, 인수);
var args = array.prototype.slice.call (인수);
var self = arguments.callee;
settimeout (function () {self.apply (null, args)}, 지연);
}
};
}
반복 함수는 arguments.callee 메소드를 사용하여 변수 자체로부터 참조를 얻기 위해 원래 명령을 실행 한 함수를 가리 킵니다. 이런 식으로 익명 함수를 다시 호출 할 수 있습니다.
문자열을 호스팅하고 경고 메소드를 실행하는 슈퍼 간단한 기능이 있습니다.
다음과 같이 코드를 복사하십시오 : function comms (s) {
경고 (들);
}
그러나 2 초의 시간 간격 마다이 작업을 세 번 반복 할 수있는 특수 버전을 만들고 싶습니다. 그러면 우리는 할 수 있습니다
코드 사본은 다음과 같습니다. var somethingwrong = 반복 (Comms, 3, 2000);
무언가가
Somethingwrong 함수를 호출 한 결과는 각 경보 간격이 2 초로 세 번 반복되는 것입니다.
논쟁은 자주 사용되지 않고 약간 이상하지는 않지만, 그들은 놀라움으로 가득 차 있으며 배우는 가치가 있습니다.