Я смотрю на четвертую проблему projecteuler.net и натолкнулся на любопытную функцию, которую мне интересно, может ли кто-нибудь объяснить.Javascript IIFE изменяет результат
Следующий код возвращает 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--;
}
тогда, когда завернутый в IIFE, он возвращает 906609, который является правильным ответом.
(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--;
}
}());
Кто-нибудь знает почему? Я не могу найти объяснения в Интернете. Ура!
'n' против' возвращения n', вероятно, преступник. первая не прерывает функцию, поэтому она продолжает двигаться, но вторая заканчивается. Что произойдет, если вы измените первый блок кода так, чтобы он «ломал» цикл? – Amy
Правильно, это точно! Добавление перерыва делает именно то, что я надеялся, большое спасибо за вашу помощь – gskll