打字机功能

时间:2019-03-26 18:03:38

标签: javascript

有人可以解释为什么第一个代码块的输出只是重复'T'而第二个代码块可以工作吗? 第一个代码块:

function typeWriter() {
  var i = 0,
  txt = 'Testing',
  speed = 40,
  typed = document.getElementById('typewriter');

  (function addChar() {
    if (i < txt.length) {
      typed.innerHTML += txt.charAt(i);
      i++;
      setTimeout(typeWriter, speed);
    }
  })();
} 

document.onload = typeWriter();

第二个代码块:

var i = 0,
  txt = 'Testing',
  speed = 40;

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

2 个答案:

答案 0 :(得分:4)

在第一个代码块中,每次typeWriter()调用都将i = 0,因此您始终会得到“ T”。在第二个中,我在typeWriter()之外定义,因此它的值在两次调用之间仍然存在。

答案 1 :(得分:1)

在第一个程序段中,您要一遍又一遍地调用typeWriter()直到i >= txt.length。但实际上,您要做的是:每当您呼叫typeWriter()时,都会调用第一行var i = 0并将i重置为0。如果您希望它按您的意愿工作,则只需要在函数外部定义i,它应该看起来像第二个块