我大约一个小时试图弄清楚为什么我从这个函数得到未定义,函数运行良好,当条件触发并且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());
})();
答案 0 :(得分: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());
})();