2014-10-21 1 views
0

JavaScript의 절대적인 초보자로서 나는 그것을 배울 수있는 좋은 소스를 선택해야했습니다. David Flanagan의 "JavaScript : The Definitive Guide"를 선택했으며 지금까지이 책의 모든 내용이 철저히 설명되었지만 막혔습니다.JavaScript의 적용 방법에 대한 도움이 필요합니다.

여기에 문제가 있습니다. "Functions"-> "Arguments Types"장에는 배열의 숫자 나 요소를 추가하는 함수의 예가 있습니다. 이 함수는 모든 수와 인수 (수로 변환 할 수있는 경우)를 허용 할 수 있습니다. 코드는 다음과 같이 진행됩니다

function flexisum() { 
    var total = 0; 
    for (var i = 0; i < arguments.length; i++) { 
     var element = arguments[i], n; 
     if (element == null) continue; 
     if (isArray(element)) 
      n = flexisum.apply(this, element); 
     else if (typeof n === "function") 
      n = Number(element()); 
     else 
      n = Number(element); 

     total += n; 
    } 
    return total; 
} 

무엇 나를 혼란 것은 재귀가 발생 라인, 난 값이 N 평가합니다 무엇을 알아낼 수 없습니다. 만약, 예를 들면, 소자 = [1,2,3], flexisum (1,2,3)은 N에 할당하지만 ... 어떻게 가변 경우에 그 값을 추가 할 n에는 초기 값이 없습니까?

영어가 모국어가 아니므로 충분히 명확했으면 좋겠습니다. 도움을 주시면 감사하겠습니다.

+0

'total'의 초기 값은 '0'입니다. 아니면 'n'에 초기 값이 없다는 것을 의미합니까? 그것은 'n'이 'else'블록을 통해 값을 갖기 때문에 중요하지 않습니다. –

답변

0

n에는 초기 값이 필요하지 않습니다. 재귀 호출을 만들면 해당 호출에는 모든 변수의 자체 복사본이 있습니다. total의 복사본을 0으로 초기화 한 다음 해당 인수를 반복합니다. 이 경우 인수는 모두 숫자이므로 각각 total에 추가하여 6이됩니다. 마지막으로 return total;을 실행하고이 값은 원래 호출에서 n에 할당됩니다. 그러면 해당 내용이 total 사본에 추가됩니다.

코드에 오류가있는 것 같습니다. 이 라인 :

else if (typeof n === "function") 

가 있어야한다 :

else if (typeof element === "function") 

은 그렇지 않으면, 초기화되지 않은 변수 n의 유형을 테스트하려고합니다. 이렇게하면 flexisum에 대한 인수로 함수를 제공 할 수 있으며 합계에 더할 값을 가져 오는 함수를 호출합니다.

+0

그래서, 내가 이해한다면 ** isArray ** 조건 아래의 명령문이 실행될 때 인자가 숫자가되고 ** 명령문 루프가 ** ** else ** statement * * n **은 해당 값을 평가하고 ** total **에 할당됩니다. 나는 지금 그것을 이해한다고 생각합니다. 대단히 감사합니다. 내가 ** 적용 ** 방법에 너무 집중하거나, 때때로 나는 바보 같다. : | – Kipislcauf

+0

'if/then/else if/else'의 각 브랜치는 다른 타입의 인자를 다루고, 그 타입에 적절한 방식으로 합계에 더할 값을 얻습니다. – Barmar

+0

글쎄, 재귀를 사용하여 더 많은 예제를 연습해야하는 것 같습니다. 도움과 시간을 다시 보내 주셔서 감사합니다. – Kipislcauf

관련 문제