Javascript函数显示一个数字,然后将其删除;行不通

Javascript函数显示一个数字,然后将其删除;行不通,javascript,settimeout,Javascript,Settimeout,我正在尝试制作一个简单的n-back游戏(记忆游戏,要求玩家观看一串弹出的数字,然后离开,将当前数字与之前的数字匹配,并后退一定的步数)。我正在尝试创建一个简单的函数,该函数将生成一个随机数,将其添加到字符串中,显示该字符串,然后停止显示该字符串,并通过删除其中的数字来重置该字符串。在我能够创建这个函数并让它工作之后,我想用for循环来循环它。然而,我花了一个多小时的时间试图让这个功能正常工作,但没有用。见下面的代码: var htmlElement = "#numbers-display";

我正在尝试制作一个简单的n-back游戏(记忆游戏,要求玩家观看一串弹出的数字,然后离开,将当前数字与之前的数字匹配,并后退一定的步数)。我正在尝试创建一个简单的函数,该函数将生成一个随机数,将其添加到字符串中,显示该字符串,然后停止显示该字符串,并通过删除其中的数字来重置该字符串。在我能够创建这个函数并让它工作之后,我想用for循环来循环它。然而,我花了一个多小时的时间试图让这个功能正常工作,但没有用。见下面的代码:

var htmlElement = "#numbers-display";



   /*
    This function generates a random number, adds it to a 
   string, then displays the string in an html element, then turns off the 
   display after a delay, then deletes the number from the string.
   */

function displayNumber() {
  var randomNumber = Math.floor(Math.random()*10);
  var displayNumber = "";
  displayNumber+=randomNumber;
  $("#numbers-display").html(displayNumber);
  window.setTimeout(dump(htmlElement), 2500);
  displayNumber.substr(1);
};

//This function empties the html contents of an element.
function dump(element) {
  $(element).empty();
};

我的部分问题是,我似乎无法让setTimeout()正常工作。我真的不知道为什么。对于这个游戏,我想在短暂的延迟后做很多事情,但是setTimeout对我来说永远不起作用。无论如何,如果我连一个接一个的随机数字串都显示不出来,我甚至无法开始构建这个游戏的其他部分,因此我非常感谢任何帮助我建立和运行这个游戏的人。请记住,我是一个完全的新手,仍然很难完成最基本的事情。

这段代码可能有一些地方需要改进,但要回答您的问题,
setTimeout
需要回调和调用回调的时间(毫秒)。您将立即调用
dump
,并将返回值传递给
setTimeout

我(至少)编辑了下面的代码,以实现所需的行为

您可能还想考虑<代码>子字符串< /代码>不改变原始字符串,而是返回一个新的字符串,因此您在DePosiNo.< /C>中使用它没有任何效果。

var htmlElement=“#数字显示”;
/*
此函数生成一个随机数,并将其添加到
字符串,然后在html元素中显示该字符串,然后关闭
延迟后显示,然后从字符串中删除数字。
*/
函数displayNumber(){
var randomNumber=Math.floor(Math.random()*10);
var displayNumber=“”;
displayNumber+=随机数;
$(“#数字显示”).html(显示数字);
setTimeout(函数(){
倾倒(htmlElement);
}, 2500);
displayNumber.substr(1);
};
//此函数用于清空元素的html内容。
函数转储(元素){
$(元素).empty();
};
displayNumber()

使用此代码可能有一些地方需要改进,但为了回答您的问题,
setTimeout
需要回调和一段时间(毫秒),在这段时间之后,回调应该被调用。您将立即调用
dump
,并将返回值传递给
setTimeout

我(至少)编辑了下面的代码,以实现所需的行为

您可能还想考虑<代码>子字符串< /代码>不改变原始字符串,而是返回一个新的字符串,因此您在DePosiNo.< /C>中使用它没有任何效果。

var htmlElement=“#数字显示”;
/*
此函数生成一个随机数,并将其添加到
字符串,然后在html元素中显示该字符串,然后关闭
延迟后显示,然后从字符串中删除数字。
*/
函数displayNumber(){
var randomNumber=Math.floor(Math.random()*10);
var displayNumber=“”;
displayNumber+=随机数;
$(“#数字显示”).html(显示数字);
setTimeout(函数(){
倾倒(htmlElement);
}, 2500);
displayNumber.substr(1);
};
//此函数用于清空元素的html内容。
函数转储(元素){
$(元素).empty();
};
displayNumber()

@Damon的答案完全正确,但如果您不想使用冗长的函数,请围绕
转储(htmlElement)进行包装,您可以使用

尝试:


@Damon的答案是完全正确的,但是如果您不想要一个详细的函数,那么请围绕
dump(htmlElement)进行包装,您可以使用

尝试:


是的,另一个选项是完全从
dump
中删除参数,因为
htmlElement
在范围内。另外-我可能会缓存元素,而不是字符串ID,但正如我所说的,一旦它按预期工作,代码可以使用更多的重构:)是的,另一个选项是完全从
dump
中删除参数,因为
htmlElement
在范围内。另外-我可能会缓存元素而不是字符串ID,但正如我所说的,一旦代码按预期工作,代码可以使用更多的重构:)
setTimeout(dump.bind(this, htmlElement), 2500);