1. JavaScript에서 인수 객체는 실제로 현재 함수의 내장 속성입니다. 인수는 Array와 매우 유사하지만 실제로는 Array 인스턴스가 아닙니다. 이는 다음 코드로 확인할 수 있습니다(물론 실제로 funcArg 함수에서는 인수 호출 시 funcArg.arguments를 작성할 필요가 없으며 인수를 직접 작성하면 됩니다).
2. 인수 객체의 길이는 형식 매개변수의 개수가 아닌 실제 매개변수의 개수에 따라 결정됩니다. 형식 매개변수는 함수 내의 메모리 공간에서 다시 열리지만 인수 객체의 메모리 공간과 겹치지 않는 변수입니다. 인수와 값이 모두 존재하는 경우에는 두 값이 동기화되지만, 그 중 하나에 값이 없으면 이 값이 없는 경우에는 값이 동기화되지 않습니다. 다음 코드를 확인할 수 있습니다.
경고(arguments.length); // 결과: "2"
a = 100;
경고(인수[0]); // 결과: "100"
인수[0] = "qqyumidi";
경고(a); // 결과: "qqyumidi"
경고(c); // 결과: "정의되지 않음"
c = 2012;
경고(인수[2]); // 결과: "정의되지 않음"
}
f(1, 2);
3. 자바스크립트의 함수 선언 및 호출 특성을 보면 자바스크립트의 함수는 오버로딩이 불가능함을 알 수 있습니다.
다른 언어의 오버로딩 기준에 따르면 "함수 반환 값이 다르거나 형식 매개변수의 개수가 다릅니다"라는 결론을 내릴 수 있습니다.
첫 번째: Javascript 함수 선언에는 반환 값 유형이 없습니다.
두 번째: 엄밀히 말하면 JavaScript의 형식 매개변수 수는 함수의 변수 연산을 용이하게 하기 위한 것입니다. 실제로 실제 매개변수는 이미 인수 객체에 저장되어 있습니다.
또한 JavaScript의 함수가 JavaScript 함수 자체에서 오버로드될 수 없는 이유를 깊이 이해해 보겠습니다. JavaScript에서 함수는 실제로 객체이고 함수 이름은 함수에 대한 참조이거나 함수 이름 자체가 변수입니다. 아래에 표시된 함수 선언과 함수 표현식의 경우 (함수 선언과 함수 표현식의 차이점을 고려하지 않고) 의미는 위와 같으며 이는 JavaScript의 함수가 오버로드될 수 없다는 특징을 이해하는 데 매우 도움이 됩니다.
함수 f(a){
10을 반환합니다.
}
함수 f(a){
반환 a - 10;
}
// 함수선언과 함수표현의 차이를 고려하지 않고 다음과 같습니다
var f = 함수(a){
10을 반환합니다.
}
var f = 함수(a){
반환 a - 10;
}
4. 인수 객체에는 매우 유용한 속성인 callee가 있습니다. 인수.callee는 이 인수 개체가 있는 현재 함수 참조를 반환합니다. 재귀 함수 호출을 사용할 때는 함수 이름 자체 대신 Arguments.callee를 사용하는 것이 좋습니다.
은 다음과 같습니다.
함수 개수(a){
If(a==1){
1을 반환합니다.
}
인수를 반환합니다.callee(--a);
}
var mm = 개수(10);
경보(mm);