在我递归函数之前结束一个函数
问题描述:
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!"
}
});
}
}
我不知道何时返回该函数,以便我没有很多同时运行的函数,如果我将newGame按钮垃圾邮件导致我的应用程序滞后。我加了一个回报;在loadEasy函数的结尾处,但这似乎没有做任何事情。在我递归函数之前结束一个函数
答
你可以设置一个标志,指示当前的游戏类型,那么你不需要重新绑定一个按钮处理程序每次,你只需要定义按钮启动当前游戏:
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");
+0
哇,工作,谢谢你真是太棒了!为什么JS读空参数为false?这也是聪明的OR逻辑,是什么帮助你以这种方式思考?这是一堂课还是仅仅是经验? – Trippze
+0
@trippze一个空参数是未定义的,undefined是虚假的。该技巧称为*短路*,并通过在SO上写回答来学习它;;) –
什么叫第一? loadEasy或startGame? – ant45de
这可能是我见过的执行如此简单任务的效率最低的代码。 –
startGame首先被调用 – Trippze