2016-04-05 11 views
1

Ich frage mich, warum diese Funktion undefined zurückgeben? Kann jemand es für mich erklären?Rekursion zurückgeben undefiniert statt 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 zurückkehren (i - 2)', 'fehlt return' –

+1

' 6% 2 = == 0' wird es nicht genug sein für die Überprüfung einer Zahl ist gerade? –

Antwort

7

Sie kommen nicht auf die Else-Anweisung zurück. In JavaScript müssen alle Funktionen etwas zurückgeben. Wenn Sie also vergessen, eine return -Anweisung einzugeben, wird sie undefined zurückgegeben.

function isEven(i){ return i%2===0; } 
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

Man könnte dies viel mit vereinfachen n am Ende, weil else nicht notwendig ist, weil die Rückkehr die Funktion Kontinuität beendet.

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));

Eine kürzeste für

wäre

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

+1

Ich kenne diese Methode, aber ich bin Rekursion Syntax :) – meks

1

Oder mit prägnantem Stil mit retur:

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

sollte

seine
} else { 
    console.log(i); 
    return isEven(i - 2); 
} 
+0

Wie funktioniert dieser Code? 'Funktion ISEVEN (i) { return (i & 1); !} document.write (ISEVEN (5));' – meks

+0

@meks, verwendet es das * Bitoperator und * ('&') das funktioniert, weil. gerade Zahlen haben ein Bit für 1, das rechte Bit, mit '&', erhalten Sie mit ungeraden Zahlen 1 und für gerade Zahlen 0. das ist anders als gewünscht, also wird hier auch der Nicht-Operator '!' angewendet Bitte sehen Sie [hier] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Bitwise_Operators) –

Verwandte Themen