为什么javascript参数未定义?

为什么javascript参数未定义?,javascript,Javascript,我得到的错误是“txtname”未定义 let i = 0; let txtOne = 'Hi'; let txtTwo = 'My name is Sarah'; let txtThree = "and I'm learning web development"; let speed = 200; let firstdiv = document.querySelector(".firstOne"); let nextdiv = document.querySelector(".nex

我得到的错误是“txtname”未定义

    let i = 0;
let txtOne = 'Hi';
let txtTwo = 'My name is Sarah';
let txtThree = "and I'm learning web development";
let speed = 200; 
let firstdiv = document.querySelector(".firstOne");
let nextdiv = document.querySelector(".nextOne");
let lastdiv = document.querySelector(".lastOne");

function typeWriter(txtname, divname) {
    if (i < txtname.length) {
divname.innerHTML += txtname.charAt(i);
       i++;
        setTimeout(typeWriter, speed);
    }
}

window.onload = typeWriter(txtOne, firstdiv);
firstdiv.addEventListener("animationend", typeWriter(txtTwo, nextdiv));
nextdiv.addEventListener("animationend", typeWriter(txtThree, lastdiv));
设i=0;
让txtOne='Hi';
让txtwo='我的名字是莎拉';
让txtThree=“我正在学习web开发”;
速度=200;
设firstdiv=document.querySelector(“.firstOne”);
设nextiv=document.querySelector(“.nextOne”);
设lastdiv=document.querySelector(“.lastOne”);
功能打字机(txtname、divname){
if(i
为什么txtname会显示为未定义?它不应该被我在打字机函数中作为参数传递的任何东西所取代吗? 为什么打字机函数不查看txtOne.length或txtwo.length等

我仍在学习javascript,因此如果这是一个基本错误,请原谅。

设置超时(打字机,速度)
意味着在200毫秒内,
打字机将被无参数调用。上一次调用的参数不会自动转入下一次调用,您需要提供它们。您可以使用匿名函数执行此操作:

setTimeout(function () { typeWriter(txtname, divname) }, speed)
window.onload = function() { typeWriter(txtOne, firstdiv) };
firstdiv.addEventListener("animationend", function() { typeWriter(txtTwo, nextdiv) });
nextdiv.addEventListener("animationend", function() { typeWriter(txtThree, lastdiv) });
在修复此问题时,可能还应该将状态(如
i
)移动到函数中,而不是依赖于全局状态。您可以接受
i
作为参数,但将默认值设置为
0

function typeWriter(txtname, divname, i) {
    i || (i = 0);

    if (i < txtname.length) {
        divname.innerHTML += txtname.charAt(i);
        setTimeout(function () { typeWriter(txtname, divname, i + 1) }, speed);
    }
}
setTimeout(打字机,速度)
意味着在200毫秒内,
typeWriter
将被无参数调用。上一次调用的参数不会自动转入下一次调用,您需要提供它们。您可以使用匿名函数执行此操作:

setTimeout(function () { typeWriter(txtname, divname) }, speed)
window.onload = function() { typeWriter(txtOne, firstdiv) };
firstdiv.addEventListener("animationend", function() { typeWriter(txtTwo, nextdiv) });
nextdiv.addEventListener("animationend", function() { typeWriter(txtThree, lastdiv) });
在修复此问题时,可能还应该将状态(如
i
)移动到函数中,而不是依赖于全局状态。您可以接受
i
作为参数,但将默认值设置为
0

function typeWriter(txtname, divname, i) {
    i || (i = 0);

    if (i < txtname.length) {
        divname.innerHTML += txtname.charAt(i);
        setTimeout(function () { typeWriter(txtname, divname, i + 1) }, speed);
    }
}

她的代码中还有更多的问题:例如
window.onload=打字机(txtOne,firstdiv)
@undefined True,我要离开一会儿,无法扩展我的回答谢谢你解释setTimeout,meagar。别担心其他问题,现在我有了这个问题,我可以试着解决其余的问题。她的代码中还有更多的问题:例如
window.onload=typeWriter(txtOne,firstdiv)
@undefined True,我要离开一会儿,无法扩展我的回答谢谢你解释setTimeout,meagar。别担心其他问题,现在我有了这个问题,我可以试着解决剩下的问题。