>

Eloquent JavaScript 연습 섹션을 읽었으며 다음 코드에서 문제가 발생했습니다. 책 :

function arrayToList(array) {
  let list = null;
  for (let i = array.length - 1; i >= 0; i--) {
    list = {value: array[i], rest: list};
  }
  return list;
}
console.log(arrayToList([10, 20]));
// → {value: 10, rest: {value: 20, rest: null}}

우선, 나는 그것이 어떻게 console.log 이해하지 못한다  그 출력을 가질 수 있습니다. 나는 특히 list = {value: array[i], rest: list}; 와 혼동  부품. 첫 번째 반복에서 array[i] 는   20 와 같습니다 따라서 목록은 이제 {value: 20, rest: null} 입니다. . 두 번째 반복에서 array[i]   10 입니다 따라서 목록은 이제 {value: 10, rest: list} 입니다.  그리고 list   {value: 20, rest: null} 참조 따라서 우리는 list = {value: 10, rest: {value: 20, rest: null}} . 이해가 정확합니까? 그렇다면 list 가 얼마나 혼란 스럽습니까? 을 지정하는 동안 이전에 포함 된 값 (예 : {value: 20, rest: null} )을 여전히 기억할 수 있습니다. . 누군가 설명해 주시겠습니까?

둘째, 왜 그것이 언급되는지 이해할 수 없습니다 :

'Building up a list is easier when done back to front. So arrayToList could iterate over the array backwards (see the previous exercise) and, for each element, add an object to the list. You can use a local binding to hold the part of the list that was built so far and use an assignment like list = {value: X, rest: list} to add an element.'

앞으로 돌아갈 때 왜 목록을 작성하는 것이 더 쉬운가요? 하지만 앞뒤로 할 때 목록을 작성할 수 있습니까?

위의 코드를 다음과 같이 변경하려고 할 때 세번째 :

function arrayToList(...array) { //Only change is from array to ...array
  let list = null;
  for (let i = array.length - 1; i >= 0; i--) {
    list = {value: array[i], rest: list};
  }
  return list;
}
console.log(arrayToList([10, 20]));
// → {value: [10, 20], rest: null} Why did the output change?


  • 답변 # 1

    두 번째 버전에서 스프레드 구문을 사용하면 함수의 모든 인수를 배열 ( "배열"이라고 함)로 수집하려고합니다. 실제로 함수를호출하면단일인수를 전달합니다 : 배열 [10, 20] . 따라서 함수에서 array   [[10, 20]] 가 될 것입니다  — 해당 배열을 단일 요소로하는 배열입니다. 따라서 루프는 한 번만 반복됩니다.

    두 번째 버전 함수를 사용하여

    console.log(arrayToList(10, 20))
    
    

    첫 번째 코드 샘플에서 얻는 것과 훨씬 비슷한 결과를 얻을 수 있습니다. 함수의 "배열"매개 변수는2값의 배열, 10  그리고 20 .

    "표현식"이 무엇인지에 대한 질문에 따르면, 그것은 직관적으로 "쉽게"얻을 수 있지만 (특히 JavaScript에서) 매우 자세하게 복잡한 구문 구조입니다. 기본적으로 수학 (대수) 구조, 비교 또는 단일 변수 참조 또는 함수 호출과 같은 것은 표현식입니다.문장은 단일 (아마도 큰) 표현식으로 만 구성 될 수 있지만 명령문은 for 일 수 있습니다.  루프, var  또는 let  선언, return  진술 및 기타 다양한 것들. 자바 스크립트 문법은 일반적으로except과 같은 특정 키워드가 포함 된 문장을 소개합니다.

  • 이전 android - 동적 파일 이름으로 SQLite 데이터베이스 백업 가져 오기
  • 다음 recursion - big-o 표기법 런타임 - 코딩 인터뷰 균열 예