javascript - javascript中的递归函数未定义

标签 javascript recursion

我花了大约一个小时试图弄清楚为什么我从这个函数中得到未定义的结果,该函数运行良好,当条件触发并且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()); 

})();

关于javascript - javascript中的递归函数未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28673069/

相关文章:

Javascript - 计算 JSON 的所有嵌套对象

javascript - ZURB 基金会 5 第 3 方 JavaScript

python - 关于递归的问题

javascript - 查找JS数组的总和,并排除所有NULL值

javascript - 如何拆分日期字符串并在不同的变量中获取结果字符串?

C:寻找树中特定叶子的霍夫曼编码路径

c - 使用递归反转数组内容(C语言)

c# - 如何跟踪所有线程的完成。 C#

c# - 如何使用javascript更改imagebutton的Imageurl?

javascript - 使用 javascript/jquery 将具有动态宽度的 div 居中?