>  기사  >  웹 프론트엔드  >  JavaScript는 인수를 사용하여 가변 길이 매개변수를 구현합니다.

JavaScript는 인수를 사용하여 가변 길이 매개변수를 구현합니다.

高洛峰
高洛峰원래의
2016-12-06 11:56:18996검색

가변 길이 매개변수를 구현하는 자바스크립트 인수 설명입니다.

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

로 변환할 수 있습니다.
성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.