2017-02-04 4 views
1
<script> 
    function range (start , end) { 
     var list =[] 
     for (var count = start ; count <= end ; count++) 
     list.push(count); 
     return list 
    } 

    function sum (nums) { 
     var total = 0; 
     for (var count = 0 ; count <= nums.length ; count++) 
     total = total + nums[count]; 
     return total; 
    } 

    console.log(range(1 , 10)) 
    console.log(sum(range(1 ,10))) 
    </script> 

Когда я запустил это, вывод из моей функции sum будет NaN. Я знаю, что решение состоит в том, чтобы удалить = из функции sum, однако я не понимаю, как это решает проблему.Почему функция производит неправильное решение

ответ

5

Вы выполняете итерацию за пределами массива nums. Таким образом, в последней итерации цикла вы эффективно выполняете total = total + undefined, результатом которого является NaN. Попробуйте, например, в консоли JavaScript, n + undefined результат: NaN, где n - любое число.

Изменить условие цикла к count < nums.length вместо <=:

for (var count = 0 ; count < nums.length ; count++) 
    total = total + nums[count]; 
1

когда вы < = это означает, что вы в том числе конечное число. все массивы 0 индексируются, то есть первый элемент имеет индекс 0

для массива из 10 элементов, это означает, что последний индекс 9

также увеличивающиеся существующий номер, который вы можете использовать +=

function range (start , end) { 
 
    var list =[] 
 

 
    //here you want INCLUSIVE because you are starting 
 
    //at VALUE 1 and ending at VALUE 10 
 
    for (var count = start ; count <= end ; count++) 
 
    list.push(count); 
 
    return list 
 
} 
 

 
function sum (nums) { 
 
    var total = 0; 
 

 
    //here you want EXCLUSIVE because you are starting 
 
    //at INDEX 0 and ending at INDEX 9 
 
    for (var count = 0 ; count < nums.length ; count++) 
 
    total += nums[count]; 
 
    return total; 
 
} 
 

 
console.log(sum(range(1,10)))

Смежные вопросы