罗马数字转换器代码在freeCodeCamp报ReferenceError: key is not defined求助
解决freeCodeCamp环境中"ReferenceError: key is not defined"的问题
问题原因
你的代码在VS Code中正常运行,但在freeCodeCamp报错,核心原因是循环中的解构变量未显式声明。VS Code使用的Node.js环境(或现代浏览器)允许在for...of循环的解构语法中隐式创建变量,但freeCodeCamp的执行环境可能启用了更严格的模式,或者使用了对ES6解构支持不完全的旧版JS引擎,导致未声明的key被识别为未定义的变量。
修复方案
只需要在for...of循环的解构变量前添加const(或let)声明即可:
function convertToRoman(num) { let romanNumerals = { M: 1000, CM: 900, D: 500, CD: 400, C: 100, XC: 90, L: 50, XL: 40, X: 10, IX: 9, V: 5, IV: 4, I: 1 } let answer = ""; let numTemp = num; let decimal = 0; let remainder = 0; if (num == 0) answer = 0; if (num > 0) { let romanArr = Object.entries(romanNumerals); // 添加const声明解构变量 for (const [key, value] of romanArr) { if (numTemp / value >= 1) { decimal = Math.floor(numTemp / value); remainder = numTemp % value; answer += key.repeat(decimal); numTemp = remainder; } } } return answer; } console.log(convertToRoman(2014)); console.log(convertToRoman(3999));
额外优化建议
- 罗马数字中没有0的表示,当
num为0时返回"0"不符合罗马数字规则,可根据需求调整为返回空字符串或提示信息。 - 可以简化变量逻辑,减少函数内全局变量数量:
for (const [key, value] of romanArr) { if (numTemp >= value) { const count = Math.floor(numTemp / value); answer += key.repeat(count); numTemp %= value; } }
内容的提问来源于stack exchange,提问作者annie
相关产品推荐
相关产品推荐

