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

记忆游戏元素创建代码失效,请求协助排查故障原因

记忆游戏JavaScript代码失效原因分析

先把你提供的代码贴出来方便对照:

const cardSet = ['fa fa-diamond','fa fa-diamond','fa fa fa-paper-plane- o','fa fa-paper-plane-o','fafa-anchor','fa fa-anchor','fa fa-bolt','fa fa- bolt','fa fa-cube','fa fa-cube','fa fa-leaf','fa fa-leaf','fa fa- bicycle','fa fa-bicycle','fa fa-bomb','fa fa-bomb']; 
let cardsOpen=[]; 
let cardsflipped = 0; 
const theDeck = document.querySelector('deck'); 
window.onload=function(){ 
  shuffle(cardSet); 
  for(let i; i<=cardSet.length;i++){ 
    let cards= document.createElement('li'); 
    cards.innerHTML='<i class="'+ cardSet[i] +'"></i>'; 
    cards.classList.add('card'); 
    theDeck.appendChild(cards); 

咱们一步步拆解代码里的问题:

  • DOM选择器错误
    你用document.querySelector('deck')是在找标签名为<deck>的元素,但实际项目里牌组容器一般是用类(比如<div class="deck">)或者ID(比如<div id="deck">)定义的,直接写deck根本找不到对应的DOM节点。后面往theDeck里添加卡牌时,会因为theDeck是null而抛出错误。应该改成.deck(类选择器)或者#deck(ID选择器),具体看你的HTML结构。

  • 卡牌类名拼写错误
    看cardSet数组里的元素,好多都有拼写问题:

    • 'fa fa fa-paper-plane- o'多了空格和多余的fa
    • 'fafa-anchor'少了空格,应该是'fa fa-anchor'
    • 'fa fa- bolt'多了空格,应该是'fa fa-bolt'
    • 'fa fa- bicycle'多了空格,应该是'fa fa-bicycle'
      这些错误的类名不仅会让Font Awesome图标显示不出来,还会导致相同卡牌的类名不一致——比如两个锚形卡牌一个是fafa-anchor一个是fa fa-anchor,游戏里永远匹配不上,直接破坏核心逻辑。
  • for循环初始化与边界错误
    你的循环写的是for(let i; i<=cardSet.length;i++),这里有两个问题:

    1. i没有初始化,默认是undefined,undefined <= 16是false,循环根本不会执行,自然不会创建任何卡牌元素;
    2. 就算初始化了i,用i<=cardSet.length也会导致数组越界——数组索引从0开始,cardSet长度是16,最大索引是15,当i=16时访问cardSet[16]会得到undefined,创建出无效的卡牌。
      正确的写法应该是:for(let i = 0; i < cardSet.length; i++)
  • shuffle函数未定义
    代码里调用了shuffle(cardSet),但完全没有这个函数的实现!JS引擎找不到这个函数会直接抛出ReferenceError,代码直接中断执行。你需要补充一个洗牌函数,比如常用的Fisher-Yates洗牌算法:

    function shuffle(array) {
      let currentIndex = array.length, randomIndex;
      while (currentIndex !== 0) {
        randomIndex = Math.floor(Math.random() * currentIndex);
        currentIndex--;
        [array[currentIndex], array[randomIndex]] = [array[randomIndex], array[currentIndex]];
      }
      return array;
    }
    
  • 代码未闭合
    你提供的代码最后缺少了多个闭合大括号:window.onload的函数体、for循环的代码块都没闭合,这会导致语法错误,JS引擎根本无法正确解析这段代码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:06:24