我正在尝试单独打印单词的每个字母。该单词是变量字符串。
我有以下代码:
function typewriter() {
var el = document.getElementById("typewr");
var string = "Hello";
for(var i=0;i<string.length;i++) {
setTimeout(function(){el.innerHTML =+ string.charAt(i);},1000);
}
}
(<div id="typewr"></div>
代码中有一个<body>
,它被<body onLoad="typewriter()">
解析)
但由于某种原因它只返回 0(1 秒后)
为什么要这么做?我如何解决它? o.O
最佳答案
您需要一个闭包来保留i
的值,然后您需要增加每次迭代的超时时间,因为循环不会等待下一次超时等,否则它不会因为所有超时都将同时执行,并且当它们执行时,i
将是它设置为的最后一个值:
function typewriter() {
var el = document.getElementById("typewr");
var string = "Hello";
for(var i=0;i<string.length;i++) {
(function(k) {
setTimeout(function(){
el.innerHTML += string.charAt(k);
},k*1000);
})(i);
}
}
我没有更改它,因为它似乎有效,但作为一般规则 string
对于变量来说是一个非常糟糕的名称,请使用 str
或其他名称其他尚未定义。
关于javascript - string.charAt() 返回 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17766647/