2015-07-30 2 views
-1

Я пытаюсь найти самое длинное слово в предоставленном предложении и вернуть длину этого слова.Почему размещение} определяет результат?

Первоначально я написал эту функцию:

function findLongestWord(str) { 
     var myArray = str.split(' '); 
     var longest=0; 
     for(var i=0; i<myArray.length; i++) { 
     if(myArray[i].length>longest) { 
      longest = myArray[i].length; 
     } 
     return longest; 
     } 
    } 

findLongestWord('The quick brown fox jumped over the lazy dog'); returns 3. 

Затем я переехал вторую до последней фигурной скобки, так что это выглядело так:

function findLongestWord(str) { 
     var myArray = str.split(' '); 
     var longest=0; 
     var word = null; 
     for(var i=0; i<myArray.length; i++) { 
     if(myArray[i].length>longest) { 
      longest = myArray[i].length; 
    } 
    } 
    return longest; 
} 
findLongestWord('The quick brown fox jumped over the lazy dog'); returns 6. 

Может кто-нибудь объяснить, почему именно первую функцию возвращает 3? Что представляют собой 3?

ответ

3

В первом коде вы не закончили цикл for, и поэтому возврат прерывает цикл и возвращает длину первого слова, а во втором коде вы возвращаете результат, когда вы выполняете цикл, и вы получаете правильный результат.

1

В первой версии вы возвращаетесь на первую итерацию цикла for, независимо от того, что происходит. Во второй версии вы не вернетесь, пока цикл for не завершится. Вот почему результат отличается. Возвращаемое значение - длина строки от myArray[i].length.

2

В первой функции оператор возврата находится внутри цикла for, поэтому он возвращает длину первого слова, которое является «The», и так возвращается 3. В то время как вторая правильно вернет длину самое длинное слово.

0

В первом примере вы возвращаете переменную длинную внутри цикла. Это заставит выполнение оставить функцию. Таким образом, функция возвращает 3, потому что она только выполняет итерацию первого элемента массива, который является словом «The».

Удачи вам!

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