2015-02-23 3 views
0

Я был около часа, пытаясь понять, почему я получаю неопределенный от этой функции, функция работает хорошо, она останавливается, когда условие триггеров и значение randomAlphabet верны, глупая ошибка, но это заставляет меня чувствовать себя очень раздражающим. Вот код:получение undefined от рекурсивной функции в javascript

(function() { 

    var getAlphabet = function() { 
    var alphabet = []; 
    for (var asciiCode = 97; asciiCode < 123; asciiCode++) { 
     alphabet.push(String.fromCharCode(asciiCode)); 
    } 
    return alphabet; 
    }; 

    var getRandomAlphabet = function(alphabet, randomAlphabet) { 

    var alphabet = alphabet || getAlphabet(); 
    var alphabetLength = alphabet.length; 
    var randomAlphabet = randomAlphabet || []; 

    if (alphabetLength === 0) { 
     return randomAlphabet; 
    }; 

    var getRandomIndex = function(min, max) { 
     return Math.floor(Math.random() * (max - min) + min); 
    }; 

    // remove the random item from the original alphabet 
    var randomIndex = getRandomIndex(0, alphabetLength); 
    var randomItem = alphabet.splice(randomIndex, 1)[0]; 

    // add the random item to the random alphabet 
    randomAlphabet = randomAlphabet.concat(randomItem); 

    getRandomAlphabet(alphabet, randomAlphabet); 

    }; 

    // this returns undefined 
    console.log(getRandomAlphabet()); 

})(); 
+2

Потому что вы ничего от 'getRandomAlphabet' не возвращаются? – Andy

+0

'return getRandomAlphabet (алфавит, randomAlphabet)' – Paleo

+1

Функция 'getRandomIndex' должна находиться рядом с' getAlphabet'. Его не нужно переопределять на каждой итерации. – Paleo

ответ

2

только то, что вам нужно вернуть метод getRandomAlphabet

(function() { 

    var getAlphabet = function() { 
    var alphabet = []; 
    for (var asciiCode = 97; asciiCode < 123; asciiCode++) { 
     alphabet.push(String.fromCharCode(asciiCode)); 
    } 
    return alphabet; 
    }; 

    var getRandomAlphabet = function(alphabet, randomAlphabet) { 

    var alphabet = alphabet || getAlphabet(); 
    var alphabetLength = alphabet.length; 
    var randomAlphabet = randomAlphabet || []; 

    if (alphabetLength === 0) { 
     return randomAlphabet; 
    }; 

    var getRandomIndex = function(min, max) { 
     return Math.floor(Math.random() * (max - min) + min); 
    }; 

    // remove the random item from the original alphabet 
    var randomIndex = getRandomIndex(0, alphabetLength); 
    var randomItem = alphabet.splice(randomIndex, 1)[0]; 

    // add the random item to the random alphabet 
    randomAlphabet = randomAlphabet.concat(randomItem); 

    return getRandomAlphabet(alphabet, randomAlphabet); 

    }; 

    // this returns undefined 
    console.log(getRandomAlphabet()); 

})(); 
Смежные вопросы