我的FizzBuzz函数执行结束后返回undefined,该如何解决?
问题原因
你遇到的多余undefined输出由两点问题导致:
- 你的
fizzBuzz函数没有显式设置返回值,JavaScript中所有无明确return语句的函数,执行后默认返回undefined - 最后一行代码
console.log(fizzBuzz(userChoice))相当于把函数默认返回的undefined额外打印了一遍,而fizzBuzz函数内部已经通过console.log完成了所有FizzBuzz结果的输出,外层的打印完全多余 - 额外小问题:你定义
fizzBuzz时没有声明形参,调用时传入的userChoice实际上没有被函数接收,当前代码依赖全局变量运行,写法不规范。
修复方案
下面两种方案任选其一即可:
- 方案一:保留函数内部打印逻辑,直接调用函数即可
const prompt = require("prompt-sync")(); let userChoice = parseInt(prompt("Please enter a number: ")); // 新增形参接收传入的上限值,消除全局变量依赖 function fizzBuzz (limit) { for (let i=1 ; i <= limit; i++){ if (i % 3 === 0 && i % 5 ===0) { console.log("FizzBuzz"); } else if (i % 3 === 0){ console.log("Fizz"); } else if (i % 5 === 0){ console.log("Buzz"); } else { console.log(i); } } } // 直接调用函数,不需要套console.log fizzBuzz(userChoice);
- 方案二:如果需要统一打印结果,改为函数返回结果数组后再打印
const prompt = require("prompt-sync")(); let userChoice = parseInt(prompt("Please enter a number: ")); function fizzBuzz (limit) { const result = [] for (let i=1 ; i <= limit; i++){ if (i % 3 === 0 && i % 5 ===0) { result.push("FizzBuzz"); } else if (i % 3 === 0){ result.push("Fizz"); } else if (i % 5 === 0){ result.push("Buzz"); } else { result.push(i); } } // 显式返回结果数组 return result } // 此时函数有明确返回值,打印返回结果即可 console.log(fizzBuzz(userChoice));
内容的提问来源于stack exchange,提问作者Diana C
相关产品推荐
相关产品推荐

