1. 인수란 무엇입니까
인수는 JavaScript에 내장된 객체입니다. 이상하고 종종 간과되지만 실제로는 매우 중요합니다. 모든 주요 JavaScript 라이브러리는 인수 객체를 활용합니다. 따라서 agruments 객체는 JavaScript 프로그래머에게 친숙해야 합니다.
모든 함수에는 함수에서 호출할 매개변수가 포함된 자체 인수 개체가 있습니다. 배열이 아닙니다. typeof 인수를 사용하면 'object'가 반환됩니다. 데이터를 호출하는 방법을 사용하여 인수를 호출할 수 있지만. 예를 들어 길이 및 인덱스 방법이 있습니다. 그러나 배열 푸시 및 팝 개체는 적용할 수 없습니다.
2. 유연한 함수 만들기
인수 객체는 사용이 매우 제한적인 것처럼 보이지만 실제로는 매우 유용한 객체입니다. 인수 객체를 사용하면 가변 개수의 인수로 함수를 호출할 수 있습니다. Dean Edwards의 base2 라이브러리에는 이러한 유연성을 보여주는 형식 지정 기능이 있습니다.
function format(string) { var args = arguments; var pattern = new RegExp(“%([1-" + arguments.length + "])”, ”g”); return String(string).replace(pattern, function(match, index) { return args[index]; }); };
템플릿 문자열을 제공합니다. "%1" ~ "%9"를 사용하여 반환 값에 자리 표시자를 추가할 수 있습니다. 그런 다음 삽입을 위해 9개의 다른 매개변수가 제공됩니다.
format(“And the %1 want to know whose %2 you %3″, ”papers”, ”shirt”, ”wear”);
위 코드는 다음을 반환합니다. And the papers want to 알고 누구의 셔츠를 입었나요?" , 문자열. Javascript를 사용하면 함수 정의 방법에 관계없이 함수에 여러 매개변수를 전달할 수 있습니다.
3. 인수 개체를 실제 배열로 변환합니다.
인수는 실제 JavaScript 배열이 아닙니다. , 그러나 이를 표준 데이터로 쉽게 변환한 다음 배열 작업을 수행할 수 있습니다.
var args = Array.prototype.slice.call(arguments);
4. 사전 설정된 인수 개체를 통해 함수 만들기
Arguments 개체를 사용하면 모든 유형의 자바스크립트 메서드를 실행할 수 있습니다. 여기에 첨부된 것은 함수 참조 및 이 함수의 모든 매개변수를 제공할 수 있는 함수의 정의입니다. 지정한 함수를 호출하는 익명 함수와 익명 함수 호출과 함께 제공되는 매개변수도 제공합니다.
function makeFunc() { var args = Array.prototype.slice.call(arguments); var func = args.shift(); return function() { return func.apply(null, args.concat(Array.prototype.slice.call(arguments))); }; }
첫 번째 적용된 인수는 함수 내부의 핵심 부분을 가리킵니다. 두 번째 인수는 이 함수의 인수 개체로 변환되는 배열입니다. makeFunc는 원래 배열 값을 인수 개체에 연결하여 함수 배열에 제공해야 합니다. 항상 동일한 위치에 템플릿을 출력하므로 템플릿을 참조할 때마다 항상 format 함수를 호출할 필요가 없습니다. makeFunc의 일반 함수를 사용하여 format을 호출한 다음 자동으로 추가할 수 있습니다. 🎜>
다음과 같이 majorTom 함수를 호출할 수 있습니다.
var majorTom = makeFunc(format, ”This is Major Tom to ground control. I'm %1.”);
majorTom(“stepping through the door”); majorTom(“floating in a most peculiar way”);
이 반환됩니다. 5. 자신을 참조하는 함수를 만듭니다.
“This is Major Tom to ground control. I'm stepping through the door.” “This is Major Tom to ground control. I'm floating in a most peculiar way.”
반복은 함수 참조와 두 개의 숫자를 전달하는 함수입니다. 첫 번째 숫자는 함수가 호출된 횟수이고 두 번째 숫자는 각 호출 사이의 시간(밀리초)입니다.
Repeat 함수는 인수.callee 메서드를 사용하여 self 변수에서 참조를 가져와 원래 명령을 실행한 함수를 가리킵니다. 이렇게 하면 익명 함수가 자신을 다시 호출할 수 있습니다.
function repeat(fn, times, delay) { return function() { if(times– > 0) { fn.apply(null, arguments); var args = Array.prototype.slice.call(arguments); var self = arguments.callee; setTimeout(function(){self.apply(null,args)}, delay); } }; }
하지만 이 작업을 2초 간격으로 세 번 반복할 수 있는 특수 버전을 만들고 싶습니다. 그러면
function comms(s) { alert(s); }
somethingWrong 함수를 호출한 결과 각 경고 사이에 2초 간격으로 이 작업을 3번 반복하게 됩니다.
인수는 자주 사용되지 않고 약간 이상하지만 놀라움으로 가득 차 있고 이해할 가치가 있습니다.var somethingWrong = repeat(comms, 3, 2000); somethingWrong(“Can you hear me, major tom?”);