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