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

如何让随机数生成后供其他变量访问?JavaScript游戏开发问题

问题分析与解决方案

先聊聊你遇到的核心问题:你在randomize()函数里更新了全局的rnd变量,但target和id这俩变量还是页面初始加载时的旧值,没跟着新的rnd同步更新;而且showBack()函数一直用的是最开始的id,所以点击按钮生成的新随机数根本没作用到隐藏逻辑上。

另外提个小细节:你的sortByOrder函数有问题——开头那段x = Math.random(); if (x <0.5) return 1; else return -1;直接就return了,后面基于order属性的排序判断根本不会执行,这个函数其实只是在随机打乱数组。要是你本来想按order字段排序,得把这段随机代码删掉才行。

下面给你两种实用的修改思路:

思路一:在randomize里同步更新所有相关变量

把target和id的更新逻辑放进randomize()里,这样每次点击按钮调用这个函数时,所有关联变量都会同步刷新:

function randomize() {
  rnd = Math.floor(Math.random() * 9);
  // 同步更新目标名称和元素ID
  target = icons[rnd].name;
  id = icons[rnd].id;
}

另外建议你在showBack()里加一步:先把之前隐藏的元素恢复可见,再隐藏新的目标,不然会出现越来越多元素被隐藏的情况:

function showBack() {
  // 先让所有图标恢复可见
  icons.forEach(icon => {
    document.getElementById(icon.id).style.visibility = "visible";
  });
  // 再隐藏当前选中的目标
  document.getElementById(id).style.visibility = "hidden";
}

思路二:去掉冗余全局变量,直接用rnd获取目标

其实你没必要把target和id存成全局变量,用到的时候直接通过rnd从icons数组里取就行,这样从根源上避免变量不同步的问题:

// 删掉全局的target和id变量
var rnd = Math.floor(Math.random() * 9);

function randomize() {
  rnd = Math.floor(Math.random() * 9);
}

function showBack() {
  // 先恢复所有图标可见
  icons.forEach(icon => {
    document.getElementById(icon.id).style.visibility = "visible";
  });
  // 直接用最新的rnd获取对应元素并隐藏
  document.getElementById(icons[rnd].id).style.visibility = "hidden";
}

这样每次点击按钮生成新随机数后,showBack()都会用最新的rnd找到对应图标隐藏,完美解决你说的变量访问问题~

内容的提问来源于stack exchange,提问作者JCS

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 04:09:23