2016-04-05 4 views
1

Я удивляюсь, почему эта функция возвращает undefined? Любой может объяснить это мне?Возврат возвращаемого значения undefined вместо true

function isEven(i) { 
    if (i === 0) { 
    return true; 
    } else if (i == 1) { 
    return false; 
    } else { 
    console.log(i); 
    isEven(i - 2); 
    } 
} 
console.log(isEven(6)); 
+3

'вернуть ISeven (я - 2)', 'отсутствует return' –

+1

' 6% 2 = == 0' будет недостаточно, чтобы проверить число даже? –

ответ

7

Вы не возвращаетесь к заявлению else. В JavaScript все функции должны что-то возвращать, поэтому, если вы забудете поставить оператор return, он вернется не определен.

} else { 
    console.log(i); 
    isEven(i - 2) 
} 

должен быть

} else { 
    console.log(i); 
    return isEven(i - 2); 
} 
1

//You should return value to expect output 
 

 
function isEven(i) { 
 
    if (i === 0) { 
 
    return true; 
 
    } else if (i == 1) { 
 
    return false; 
 
    } else { 
 
    console.log(i); 
 
    return isEven(i - 2); 
 
    } 
 
} 
 

 
console.log(isEven(5))

4

Вы могли бы упростить это много с:

function isEven(i){ return i%2===0; } 
+1

Я знаю это methoed, но я симулирую синтаксис рекурсии :) – meks

1

Или с более кратким стилем с Ретурами n в конце, потому что else не требуется, поскольку возврат завершает непрерывность funtion.

function isEven(i) { 
 
    if (i === 0) { 
 
     return true; 
 
    } 
 
    if (i == 1) { 
 
     return false; 
 
    } 
 
    document.write(i + '<br>'); 
 
    return isEven(i - 2); 
 
} 
 
document.write(isEven(6));

Кратчайший бы для

function isEven(i) { 
 
    return !(i & 1); 
 
} 
 
document.write(isEven(5));

+0

как работает этот код? 'функция ISEVEN (я) { возвращение (я & 1); !} document.write (ISEVEN (5)),' – meks

+0

@meks, он использует * битовый оператор и * ('&') это работает, потому что. четные числа имеют один бит для 1, самого правильного бита с '&', вы получаете с неравными номерами 1 и для четных чисел 0., что является опорой для разыскиваемых, поэтому здесь применяется не оператор '!' пожалуйста, посмотрите [здесь] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Bitwise_Operators) –

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