가변 길이 매개변수를 구현하는 자바스크립트 인수 설명입니다.
C#에는 가변길이 매개변수 params[]가 있는데, js에서는 이런 가변 매개변수를 어떻게 구현하나요?
1. 가변 길이 매개변수
저는 자바스크립트에 이런 기능이 있다는 것을 전혀 몰랐습니다.
먼저 애플리케이션 시나리오를 살펴보겠습니다. 인수를 사용하여 원하는 수의 매개변수를 js 함수에 전달합니다.
function Test() { console.log(arguments[0]); console.log(arguments[1]); console.log(arguments[2]); }; Test(1, 2, 3);
출력 1 2 3;
물론 자바스크립트 함수에 배열을 넣을 수도 있지만, 고정 길이.
2. Argument 객체를 직접 수정하지 마세요
Argument 객체는 배열과 비슷하지만 실제로는 배열이 아닙니다. 배열의 Shift 함수인 호출 방식을 사용합니다. 그것에 사용될 수도 있지만 인수를 변경하려고 시도하지 마십시오. 혼란을 야기하기 쉽습니다.
정말로 수정하고 싶다면 인수의 내용을 새 배열에 복사한 다음 새 배열에서 수정하면 됩니다.
var args = [].slice.call(arguments);
함수 간 액세스를 달성하기 위해 인수를 변수와 바인딩합니다.
인수 변수는 본문에 암시적으로 바인딩됩니다. 각 함수의 각 함수 내부에 있다는 점에 유의하세요.
반복자의 예를 통해 이 문제를 설명할 수 있습니다.
function values() { //values有自己的arguments var i = 0, n = arguments.length; return { hasNext: function () { return i < n; //hasNext 有自己的arguments }, next: function () { if(i >= n) { throw new Error("已经是最后一个元素!"); } return arguments[i++]; //next 有自己的arguments } } } var it = values(1, 2, 3, 4, 5, 6, 7); console.log(it.next()); //undefined console.log(it.next()); //undefined console.log(it.next()); //undefined
외부 함수의 인수에 액세스하려면 로컬 변수 바인딩 방식은 내부 레이어에서만 접근 가능합니다. 위의 예는
function values() { //values有自己的arguments var i = 0, n = arguments.length, ourterArgs = arguments; return { hasNext: function () { return i < n; //hasNext 有自己的arguments }, next: function () { if(i >= n) { throw new Error("已经是最后一个元素!"); } return ourterArgs[i++]; //ourterArgs 外层保存的 arguments } } } var it = values(1, 2, 3, 4, 5, 6, 7); console.log(it.next()); //1 console.log(it.next()); //2 console.log(it.next()); //3로 변환할 수 있습니다.