getRandomIntInclusive使用是否正确?为何1-4范围随机数触发异常分支
核心错误点
- 随机数函数缺少返回值
你定义的getRandomIntInclusive函数仅将计算结果打印到控制台,没有使用return语句返回结果,JS中没有显式return的函数调用后默认返回undefined,因此randomColor(1,4) === 1这类判断永远不成立,必然触发else分支的异常日志。 - 条件判断重复生成随机数
即便给随机函数补充了返回值,当前代码的每个if/else if分支都会重新调用一次随机函数生成新值,会出现多次生成的随机数都无法匹配当前判断条件的情况,比如第一次判断生成2不匹配===1的条件,第二次判断生成3不匹配===2的条件,最终还是会进入else分支,不符合你只生成一次随机数匹配对应按钮的需求。
修正后的代码
// 修正随机函数,增加return返回结果 let randomColor = function getRandomIntInclusive(min, max){ min = Math.ceil(min) max = Math.floor(max) const res = Math.floor(Math.random() * (max - min + 1) + min) console.log(res) return res // 必须返回结果才能在后续判断中使用 } function getRandomColor() { // 只生成一次随机数,存入变量后再做判断 const num = randomColor(1, 4) if (num === 1){ redBtn.style.opacity = "90%" setTimeout(function(){ redBtn.style.opacity = "40%" },300) console.log(num) } else if (num === 2){ blueBtn.style.opacity = "90%" setTimeout(function(){ blueBtn.style.opacity = "40%" },300) console.log(num) } else if (num === 3){ greenBtn.style.opacity = "90%" setTimeout(function(){ greenBtn.style.opacity = "40%" },300) console.log(num) } else if (num === 4){ yellowBtn.style.opacity = "90%" setTimeout(function(){ yellowBtn.style.opacity = "40%" },300) console.log(num) } else { console.log('Something is not working') console.log(num) } } getRandomColor()
内容的提问来源于stack exchange,提问作者Nicole
相关产品推荐
相关产品推荐

