React Native移动端开发中遇到READ-ONLY ERROR该如何解决?
React Native中READ-ONLY ERROR的解决方法及随机数代码修复
问题原因
你这段代码触发READ-ONLY ERROR的核心原因:用const声明的箭头函数generateRandomBetween是只读变量,在函数内部尝试重新赋值generateRandomBetween = (min,max,exclude),违反了const的只读特性,直接导致报错。同时你的递归写法也存在错误,没有正确调用函数本身。
修复后的代码
const generateRandomBetween = (min, max, exclude) => { min = Math.ceil(min); max = Math.floor(max); // 修正随机数范围,确保能取到max值 const rndnum = Math.floor(Math.random() * (max - min + 1)) + min; if (rndnum === exclude) { // 正确递归调用函数,而非重新赋值 return generateRandomBetween(min, max, exclude); } else { return rndnum; } };
关键修复点
- 移除对
const声明的函数的重新赋值操作,改为递归调用函数本身 - 修正随机数生成公式,确保生成的随机数范围包含
max(原代码只能生成[min, max)区间的数,无法取到max) - 保留
const声明函数的方式,符合变量声明规范
额外优化建议
如果exclude不在[min, max]区间内,递归会直接返回结果,无需额外处理。若担心极端场景下的递归深度(比如min=max且等于exclude),可以添加边界判断:
const generateRandomBetween = (min, max, exclude) => { min = Math.ceil(min); max = Math.floor(max); // 边界判断:当min等于max且等于exclude时,无有效数可生成 if (min === max && min === exclude) { throw new Error('没有符合条件的随机数可生成'); } const rndnum = Math.floor(Math.random() * (max - min + 1)) + min; return rndnum === exclude ? generateRandomBetween(min, max, exclude) : rndnum; };
内容的提问来源于stack exchange,提问作者Muqsit Ali
相关产品推荐
相关产品推荐

