1. 인수란 무엇입니까
인수는 JavaScript에 내장된 객체입니다. 이상하고 종종 간과되지만 실제로는 매우 중요합니다. 모든 주요 JavaScript 라이브러리는 인수 객체를 활용합니다. 따라서 agruments 객체는 JavaScript 프로그래머에게 친숙해야 합니다.
모든 함수에는 함수에서 호출할 매개변수가 포함된 자체 인수 개체가 있습니다. 배열이 아닙니다. typeof 인수를 사용하면 'object'가 반환됩니다. 데이터를 호출하는 방법을 사용하여 인수를 호출할 수 있지만. 예를 들어 길이 및 인덱스 방법이 있습니다. 그러나 배열 푸시 및 팝 개체는 적용할 수 없습니다.
2. 유연한 함수 만들기
인수 객체는 사용이 매우 제한적인 것처럼 보이지만 실제로는 매우 유용한 객체입니다. 인수 객체를 사용하면 가변 개수의 인수로 함수를 호출할 수 있습니다. Dean Edwards의 base2 라이브러리에는 이러한 유연성을 보여주는 형식 지정 기능이 있습니다.
function format(string) {
var args = 인수;
var 패턴 = new RegExp(“%([1-"args.length "])”, ”g”)
return String(string).replace(pattern, function(match, index) {
반환 인수[색인]
});
};
템플릿 문자열을 제공합니다. "%1" ~ "%9"를 사용하여 반환 값에 자리 표시자를 추가할 수 있습니다. 그런 다음 삽입을 위해 9개의 다른 매개변수가 제공됩니다.
format(“그리고 %1은(는) 누구의 %인지 알고 싶어합니다. 2 you % 3″, “papers”, “shirt”, “wear”);
위의 코드는 다음을 반환합니다. And the papers want to Know 누구의 셔츠를 입었는지 알고 싶어합니다.
한 가지가 있습니다. 주의할 점은 함수를 정의할 때 하나의 매개변수인 문자열만 지정한다는 점입니다. Javascript에서는 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에 제공합니다. 인수 배열에서 제거됩니다. 그런 다음 makeFunc는 지정된 메서드를 실행하는 익명 함수를 반환합니다.
첫 번째 적용된 인수는 함수 호출의 범위, 주로 함수 내부의 주요 부분을 가리킵니다. 지금은 이를 null로 유지하겠습니다. 두 번째 인수는 이 함수의 인수 개체로 변환되는 배열입니다. makeFunc는 원래 배열 값을 인수 객체로 연결하고 익명 함수와 호출된 함수에 배열을 제공합니다.
템플릿을 항상 같은 위치에 출력해야 템플릿이 참조될 때마다 항상 포맷 함수를 호출할 필요가 없습니다. makeFunc의 일반 기능을 사용하여 format을 호출하는 함수를 반환한 다음 자동으로 템플릿을 완성할 수 있습니다.
코드 복사
코드는 다음과 같습니다.
var majorTom = makeFunc(format, “This is Major Tom 저는 %1입니다.”);
majorTom 함수를 다음과 같이 호출할 수 있습니다.
majorTom("문을 통과하다");
majorTom("가장 특이한 방식으로 떠다님");
majorTom을 호출할 때마다 형식 함수와 첫 번째 인수가 모두 호출됩니다. 작성된 템플릿입니다. 그런 다음
코드 복사를 반환합니다. 코드는 다음과 같습니다.
“지상 관제소에 Tom 소령입니다. . 문으로 들어서고 있습니다."
"지상 관제소의 톰 소령입니다. 저는 아주 특이한 방식으로 떠다니고 있습니다."
5. 자신을 참조하는 함수를 만듭니다
여러분은 이것이 매우 이상하다고 생각할 수도 있습니다. 멋지지만, 그 주장에는 더 놀라운 일이 있습니다. 여기에는 다른 유용한 기능인 호출 수신자 메서드가 있습니다. Arguments.callee에는 인수 객체를 생성하는 함수에 대한 참조가 포함되어 있습니다. 그럼 어떻게 사용하나요?
Arguments.callee 메서드를 사용하면 익명 함수가 자신을 편리하게 가리킬 수 있습니다.
반복은 함수 참조와 두 개의 숫자를 전달하는 함수입니다. 첫 번째 숫자는 함수가 호출된 횟수이고 두 번째 숫자는 각 호출 사이의 시간(밀리초)입니다.
function Repeat(fn, times, Delay) {
return function () {
if(times– > 0) {
fn.apply(null, 인수)
var args = Array.prototype.slice.call(arguments); var self = 인수.callee;
setTimeout(function(){self.apply(null,args)}, 지연)
}
};
Repeat 함수는 인수.callee 메서드를 사용하여 원래 명령을 실행한 함수를 가리키는 변수 self에서 참조를 얻습니다. 이렇게 하면 익명 함수가 자신을 다시 호출할 수 있습니다.
문자열을 전달하고 경고 메서드를 실행하는 매우 간단한 함수가 있습니다.
코드 복사
}
하지만 이 작업을 2초 간격으로 세 번 반복할 수 있는 특별 버전을 만들고 싶습니다. 그러면
코드 복사
somethingWrong 함수를 호출한 결과 알림 사이에 2초 간격으로 이 작업이 3번 반복됩니다. .
인수는 자주 사용되지 않고 약간 이상하지만 놀라움으로 가득 차 있고 이해할 가치가 있습니다.