You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 07:48:42