홈>
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
관련 자료
- Generic이 Kotlin에서 Int 인 경우 Generic은 어떻게 작동합니까?
- reactjs - 반응 목록, 다른 것이 정확히 작동하면 어떻게됩니까?
- c++ - 어떻게 작동합니까? 포인터 할당에 대한 포인터
- java - 기본 kafkaListenerContainerFactory는 어떻게 작동합니까?
- namespace - --hostname은`buildah run`에서 어떻게 작동합니까?
- bash - grep은 DOS 줄 끝을 어떻게 처리합니까?
- python - 파일의 목록을 바꾸는 방법은 무엇입니까?
- mouse - 키보드가 작동하지 않는 이유는 무엇입니까?
- c# - Linq를 사용하여 다른 목록의 값으로 목록을 정렬하는 방법
- exception - Erlang의 목록을 어떻게 다시 작성할 수 있습니까?
- mysql - Yii2에서 DB의 두 테이블에서 드롭 다운 목록을 만드는 방법은 무엇입니까?
- python - for 루프에서 목록의 일부 번호를 제외하는 방법
- c# - SQL 테이블에 목록을 삽입하는 방법
- python - 결과를 문자열 목록으로 만드는 방법은 무엇입니까?
- java - 내 HashMap에 목록을 채우려면 어떻게해야합니까?
- svelte - v312에서 작동하는 데 사용 된 기능이 v330에서 작동하지 않습니다
- php - 목록에서 배열을 얻는 방법
- ios - SwiftUI에서 목록의 일부로 View ()를 전달하는 방법은 무엇입니까?
- python - 목록의 텍스트 파일을 어떻게 변형합니까?
- sql - MySQL에서 뷰를 생성하는 데 얼마나 걸립니까?
관련 질문
- javascript : 반복하지 않고 이러한 기능을 결합하는 방법은 무엇입니까?
- javascript : 동일한 HTML 양식의 다른 드롭 다운 목록을 기반으로 드롭 다운 목록 채우기
- javascript : React로 두 요소마다 새로운 ul 생성
- javascript : 여러 목록을 단일 목록으로 통합하는 방법은 무엇입니까?
- javascript : 반복하지 않고 여러 기능을 하나로 결합하는 방법은 무엇입니까?
- javascript : 이 프로그램에 매개 변수와 알고리즘 (시퀀싱, 선택 및 반복 포함)을 추가하여 동일한 작업을 수행하려면 어떻게해야합니까?
- javascript : 화살표 함수를 사용하지 않고 함수에 매개 변수를 전달하는 js 반응
두 번째 버전에서 스프레드 구문을 사용하면 함수의 모든 인수를 배열 ( "배열"이라고 함)로 수집하려고합니다. 실제로 함수를호출하면단일인수를 전달합니다 : 배열
[10, 20]
. 따라서 함수에서array
[[10, 20]]
가 될 것입니다 — 해당 배열을 단일 요소로하는 배열입니다. 따라서 루프는 한 번만 반복됩니다.두 번째 버전 함수를 사용하여
첫 번째 코드 샘플에서 얻는 것과 훨씬 비슷한 결과를 얻을 수 있습니다. 함수의 "배열"매개 변수는2값의 배열,
10
그리고20
."표현식"이 무엇인지에 대한 질문에 따르면, 그것은 직관적으로 "쉽게"얻을 수 있지만 (특히 JavaScript에서) 매우 자세하게 복잡한 구문 구조입니다. 기본적으로 수학 (대수) 구조, 비교 또는 단일 변수 참조 또는 함수 호출과 같은 것은 표현식입니다.문장은 단일 (아마도 큰) 표현식으로 만 구성 될 수 있지만 명령문은
for
일 수 있습니다. 루프,var
또는let
선언,return
진술 및 기타 다양한 것들. 자바 스크립트 문법은 일반적으로except과 같은 특정 키워드가 포함 된 문장을 소개합니다.