Javascript setTimeout变量超出范围 //随机字符串 var strings=[“这怎么可能?”,“你听说过吗?”; var WriteLine=函数 { var end=s.length,sc=s.split(“”); 对于(counter=0;counter
问题的答案是使用闭包,您必须“保存”上下文。 您使用的setTimeout在一段时间后执行函数,而for循环的速度(比方说)超过20毫秒,因此当setTimeout执行函数时,您的函数计数器已经是s.length了,这就是为什么您的计数器没有定义Javascript setTimeout变量超出范围 //随机字符串 var strings=[“这怎么可能?”,“你听说过吗?”; var WriteLine=函数 { var end=s.length,sc=s.split(“”); 对于(counter=0;counter,javascript,html,Javascript,Html,问题的答案是使用闭包,您必须“保存”上下文。 您使用的setTimeout在一段时间后执行函数,而for循环的速度(比方说)超过20毫秒,因此当setTimeout执行函数时,您的函数计数器已经是s.length了,这就是为什么您的计数器没有定义 <script language="javascript"> // random strings var strings = ["How is it even possible?", "Have you ever hea
<script language="javascript">
// random strings
var strings = ["How is it even possible?", "Have you ever heard about this?"];
var WriteLine = function(s)
{
var end=s.length, sc=s.split("");
for(counter = 0;counter<end;counter++)
{
setTimeout(function(){document.write(sc[counter]);},20);
// ^^^^^^^^^^^
}
}
strings.forEach(WriteLine);
</script>
//随机字符串
var strings=[“这怎么可能?”,“你听说过吗?”;
var WriteLine=函数
{
var end=s.长度,
sc=s.分割(“”);
对于(计数器=0;计数器不超出范围,当超时发生时它有错误的值。而且,不,这与<代码> < <代码> >有关。在处理SETTIMEOUT时要考虑的另一件事是<代码> SETTIMEOUT在全局范围< /代码>中执行,因此它将为全局变量提供优先权。谢谢您的帮助!)
// random strings
var strings = ["How is it even possible?", "Have you ever heard about this?"];
var WriteLine = function(s)
{
var end=s.length,
sc=s.split("");
for(counter = 0;counter<end;counter++)
{
setTimeout((function(c){
document.write(sc[c]);
})(counter),20);
//
}
}
strings.forEach(WriteLine);