在我递归再次调用之前结束函数

时间:2017-08-29 15:26:12

标签: javascript recursion return

function startGame(diff){
 if (diff === 'easy'){
  loadEasy();
 }
}

function loadEasy(){
 difficultyPage.style.display = 'none';
 game.style.display = 'block';
 medHardTemplate.style.display = 'none';
 easyTemplate.style.display = 'block';

 newGame.addEventListener('click', function(){
  changeDifficulty('easy');
 });

 colors = randomColorsArray(3);

 correctColor = colorToChoose(colors);
 colorRGB.innerHTML = correctColor;

 for (var i = 0; i < easySquares.length; i++) {
  //add colors to squares
  easySquares[i].style.backgroundColor = colors[i];

 easySquares[i].addEventListener('click', function(){
  var clickedColor = this.style.backgroundColor;

  if(clickedColor === correctColor) {
    changeColorsOnWinEasy(correctColor);
    message.innerHTML = "Correct!"      
    again.textContent = "Play Again?"
    again.addEventListener('click', function(){
        again.textContent = "NEW COLORS";
        header.style.backgroundColor = "#232323";
        colorRGB.style.backgroundColor = "#232323";
        message.innerHTML = "";
        changeDifficulty('easy');
    });
}
else {
    this.style.backgroundColor = "#232323";
    message.innerHTML = "Wrong!"
 }
});
}
}

我不知道何时返回该功能,以便在我垃圾新游戏按钮导致我的应用程序滞后时,我不会同时运行许多功能。我加了一个回报;在loadEasy函数结束时,但似乎没有做任何事情。

1 个答案:

答案 0 :(得分:1)

你可以设置一个标志来指示当前的游戏类型,然后你不需要每次重新绑定按钮处理程序,你只需要将按钮定义为启动当前游戏

let gametype = "easy":

function startGame(diff){
  gametype = diff || gametype;
  if (gametype === 'easy'){
    loadEasy();
  }
  else {
    throw Error('unknown gametype: ' + gametype);
  }
}

function loadEasy(){
  //... Whatever  
}

newGame.addEventListener('onclick', function(){
  startGame();
});

所以用当前的游戏类型开始游戏:

startGame();

要启动另一个,请传递一个参数:

startGame("medium");