Ich schaue auf das vierte Problem von projecteuler.net und bin auf ein merkwürdiges Feature gestoßen, das mich wundern könnte, wenn irgendjemand es erklären könnte.Javascript IIFE Änderungen Ergebnis
Der folgende Code gibt 10001
var n = 999 * 999; //biggest product with 3 digit numbers
var x;
while (n>10000) { //smallest product of 3 digit numbers
if (n.toString() === n.toString().split('').reverse().join('')) {
x = Math.floor(Math.sqrt(n));
while (n % x !== 0 && x >= 100 && n/x <= 999) {
x--;
}
if (n % x === 0 && x>= 100 && n/x <= 999) {
n;
}
}
n--;
}
während, wenn in einem IIFE gewickelt, es 906.609 zurück, die die richtige Antwort ist.
(function euler4() {
var n = 999 * 999; //biggest product with 3 digit numbers
var x;
while (n>10000) { //smallest product of 3 digit numbers
if (n.toString() === n.toString().split('').reverse().join('')) {
x = Math.floor(Math.sqrt(n));
while (n % x !== 0 && x >= 100 && n/x <= 999) {
x--;
}
if (n % x === 0 && x>= 100 && n/x <= 999) {
return n;
}
}
n--;
}
}());
Weiß jemand warum? Ich kann online keine Erklärung finden. Prost!
'n' gegen' n' Rückkehr ist wahrscheinlich der Täter. das erste beendet die Funktion nicht, so dass es weitergeht, aber das zweite endet. Was passiert, wenn Sie den ersten Codeblock so ändern, dass er bricht, die Schleife? – Amy
Genau das ist es genau! Hinzufügen der Pause tut genau das, was ich gehofft hatte, vielen Dank für Ihre Hilfe – gskll