从javascript中的递归函数获取undefined

getting undefined from recursive function in javascript

本文关键字:获取 undefined 递归函数 javascript      更新时间:2024-03-14

我花了大约一个小时的时间试图弄清楚为什么我从这个函数中得到了未定义,这个函数运行得很好,当条件触发并且randomAlphabet的值正确时,它就会停止,这确实是一个愚蠢的错误,但它让我感到非常讨厌。这是代码:

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

只需要返回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()); 
})();