Javascript 函数在后续调用中使用setTimeout抛出

Javascript 函数在后续调用中使用setTimeout抛出,javascript,html,function,settimeout,Javascript,Html,Function,Settimeout,我在尝试一些简单的东西,打字效果: var i=0; var txt=“生态” 无功转速=1; 功能打字机(idtxt){ 如果(i函数()吗,这样我就可以进一步研究它了。多谢了,这是一个,基本上它将打字机(idtxt)包装在一个函数中,这样您就可以作为参数传入。它类似于function(){typeWriter(idtxt)}。如果您还不知道这部分的话。我建议您使用setTimeout(打字机、速度、idtxt)作为下面显示的答案,以避免混淆。innerHTML+=不好。它是缓慢的,而且是浪

我在尝试一些简单的东西,打字效果:

var i=0;
var txt=“生态”
无功转速=1;
功能打字机(idtxt){
如果(i


设置超时中调用
打字机时,您忘记输入
idtxt

var i=0;
var txt=“生态”
无功转速=1000;
功能打字机(idtxt){
如果(i打字机(idtxt),速度);
}
};

更改
设置超时(打字机、速度)设置超时(打字机、速度、idtxt)
无法发送
idtxt
参数

PS-cahnge也
var-speed=10001s==1000ms

var i=0;
var txt=“生态”
无功转速=1000;
功能打字机(idtxt){
如果(i


发生这种情况是因为在第一次调用
打字机后,
idtxt
变量超出范围。您可以将参数作为
setTimeout
的第一个参数传递给
typeWriter
的后续调用。像这样:

setTimeout(打字机、速度、idtxt);
您可以在此处阅读有关设置超时的更多信息:

您可以在这里了解更多关于为什么这是必要的:

var i=0;
var txt=“生态”
无功转速=1000;
功能打字机(idtxt){
如果(i


ES6提供了其他方法

例如,承诺管理:

const delay=ms=>新承诺(r=>setTimeout(r,ms))
,txt=“你好,世界!”
;
异步功能打字机(idtxt)
{
const elm=document.getElementById(idtxt)
等待(请发送txt的信函)
{
elm.textContent+=字母
等待延迟(500)
}
}
remo-btn

您能告诉我这种类型的实现被称为
()=>函数()
吗,这样我就可以进一步研究它了。多谢了,这是一个,基本上它将
打字机(idtxt)
包装在一个函数中,这样您就可以作为参数传入。它类似于
function(){typeWriter(idtxt)}
。如果您还不知道这部分的话。我建议您使用
setTimeout(打字机、速度、idtxt)
作为下面显示的答案,以避免混淆。
innerHTML+=
不好。它是缓慢的,而且是浪费的,而且大多数时候它是不必要的。最好将该行更改为
document.getElementById(idtxt.textContent=txt.slice(0,i+1)我试图遵循代码,但我很难理解某些部分。我需要提高我的JavaScript知识。但是非常感谢,这可以帮助我使我的代码更加实用。你不需要将字符串转换成数组,字符串是可编辑的。您正是使用它将字符串扩展到一个数组中。这里的wait
不需要
,因为迭代器是同步的。循环的内容是异步的并不重要。所以
对于(让txt字母)
就足够了。