• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

Array.prototype.slice.call(arguments)에 대한 질문

21.05.26 02:44 작성 조회수 237

1

선생님 안녕하세요. 

파라미터 병합의 예제에 있는 코드 중 

Array.prototype.slice.call(arguments) 에 대해 질문이 있습니다. 

slice 메소드에서 call을 통해 arguments를 this로 참조하기만 하는 게 아닐까요? 

slice메소드가 실행될 배열이 주어진 게 없는 것 같은데,  10, 20이 파라미터로 들어 갔을 때  어떻게 [10, 20] 과 같은 배열의 형태로 반환되는 건지 궁금합니다. 

감사합니다!

답변 1

답변을 작성해보세요.

1

window.onload = function(){
  debugger;
  // 개발자 도구 창에서 one과 two를 펼치면 설정된 [10, 20]의 모습이 같습니다. 즉, 빌트인 Array 오브젝트에서 처리하는 형태와 방법이 같다는 뜻입니다.
  var one = [10, 20];

  // arguments는 아래와 같은 형태입니다.
  var two = {0: 10, 1: 20, length: 2};

  // 비기너 과정에서 slice()를 호출하면, 엔진이 Array 인스턴스를 생성하여 slice()를 실행한다고 하였습니다.
  var three = [10, 20].slice();

  // slice를 호출하면 엔진이 Array 인스턴스를 생성하고, arguments가 {0: 10, 1: 20, length: 2} 형태이므로 [10, 20] 형태로 변환되어 생성한 인스턴스에 설정합니다. 이 모습은 [10, 20].slice()과 같습니다. this가 생성한 Array 인스턴스의 [10, 20]을 참조합니다.
  Array.prototype.slice.call(arguments);

  // "ES6+" 과정에서 this 참조에 대해 조금 더 다룹니다.
}

이하영님의 프로필

이하영

질문자

2021.05.26

감사합니다~!