Javascript 如何将此函数转换为干函数?

Javascript 如何将此函数转换为干函数?,javascript,html,Javascript,Html,我试图在我的页面中添加一个打字机效果,它可以很好地处理预定义的数据,但我无法将其转换为一个函数,该函数接收值,然后打印这些值 我尝试通过添加参数和打印传入的值来更改原始函数,但只打印第一个字母 设i=0; 让txt=‘你好,世界’; 速度=50; 功能打字机(){ 如果(i{ ele.innerHTML+=c; },速度*i); }); } 打字机(“文本”、“你好世界”) 您可以对id和text进行闭包,并为第一次调用调用返回的函数。然后在超时时进行任何其他需要的调用 这种方法会缩短字符串并

我试图在我的页面中添加一个打字机效果,它可以很好地处理预定义的数据,但我无法将其转换为一个函数,该函数接收值,然后打印这些值

我尝试通过添加参数和打印传入的值来更改原始函数,但只打印第一个字母

设i=0;
让txt=‘你好,世界’;
速度=50;
功能打字机(){
如果(i

功能打字机(id,文本){
如果(i
打印第一个字母,控制台打印此消息“错误” TypeError:无法读取未定义的属性'length' 在打字机旁(xifoxoj.js:18:16)”

我的期望值是,传递到函数中的文本值将在元素中完全打印,id传递到函数中,但只打印文本值的第一个字母。

使用String#split,Array#forEach

注意:将速度增加
speed*i

功能打字机(id,文本){
恒速=500;
常量ele=document.getElementById(id)
text.split(“”).forEach((c,i)=>{
设置超时(()=>{
ele.innerHTML+=c;
},速度*i);
});
}
打字机(“文本”、“你好世界”)

您可以对
id
text
进行闭包,并为第一次调用调用返回的函数。然后在超时时进行任何其他需要的调用

这种方法会缩短字符串并以空字符串结束

功能打字机(id,文本){
返回函数(){
如果(文本){
document.getElementById(id).innerHTML+=text[0];
设置超时(打字机(id,text.slice(1)),速度);
}
};
}
无功转速=50;
打字机(“文本”、“你好世界”)()

您的错误:是的,我没有在函数范围内定义
设置超时(打字机,速度)
您没有将任何参数传递给
打字机
编辑的速度比回答的速度快@安德烈亚斯有正确的答案。我建议把它作为问题的答案。@Andreas当我把id和文本都交给打字机时,文本会一次全部打印出来,而不是一个接一个地打印出来。你知道我怎样才能让它一次打印一封信吗?谢谢,非常感谢!你的答案正是我一直想做的。谢谢你@NinaScholz你的答案对我也很有用。
let i = 0;
let txt = 'Hello world';
let speed = 50;

function typeWriter() {
  if (i < txt.length) {
    document.getElementById("text").innerHTML += 
    txt.charAt(i);
    i++;
    setTimeout(typeWriter, speed);
  }
}

typeWriter();
function typeWriter(id, text) {
  if (i < text.length) {
    document.getElementById(id).innerHTML += text.charAt(i);
    i++;
    setTimeout(typeWriter, speed);
  }
}


typeWriter("text", "Hello world" );