Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/438.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 函数只执行一次_Javascript_Html - Fatal编程技术网

Javascript 函数只执行一次

Javascript 函数只执行一次,javascript,html,Javascript,Html,所以我建立了一个名为lines的列表,其中每一行都是分开设置的。然后这些数据被发送到另一个名为rdline()的函数,该函数读取这些数据。我已经设置了一个警报来查看发生了什么,当数组中有多个条目时,它只会发出一次警报 var-ms=false; var-ss; var c; var-lc; var行=[]; var-currset; 瓦尔温; var sendline=0; var op=函数(){ document.getElementById('rd').innerHTML=“正在阅读…”

所以我建立了一个名为
lines
的列表,其中每一行都是分开设置的。然后这些数据被发送到另一个名为
rdline()
的函数,该函数读取这些数据。我已经设置了一个警报来查看发生了什么,当数组中有多个条目时,它只会发出一次警报

var-ms=false;
var-ss;
var c;
var-lc;
var行=[];
var-currset;
瓦尔温;
var sendline=0;
var op=函数(){
document.getElementById('rd').innerHTML=“正在阅读…”;
ss=document.getElementById('t').innerHTML;
c=document.getElementById('t').innerHTML;
document.getElementById('t').innerHTML=“”;
lc=0;
行=[];
currset=[];
设定线(c);
}
变量设置线=功能(续){
对于(i=0;i”,“)+”;
lc++;
currset=[];
}否则{
currset[i]=cont[i];
}
}
对于(i=0;i
code{
宽度:100%;
高度:100vh;
边界:无;
背景:黑色;
颜色:白色;
字体大小:150%;
字体系列:无衬线;
显示:内联块;
}
运行



问题在于,在
设置行
函数中有一个循环,它使用
i
作为计数器,但您没有使用
var
对其进行初始化,这使其成为一个全局变量:

function setLines(cont) {
  // RIGHT HERE, YOU ARE NOT DECLARING i WITH var
  for (i = 0; i < cont.length; i++) {
    if (cont[i] == ";") {
      lines[lc] = currset.join("").replace("<br>", "") + " ";
      lc++;
      currset = [];

    } else {
      currset[i] = cont[i];
    }
  }

  // RIGHT HERE, YOU ARE NOT DECLARING i EITHER, SO THE PREVIOUS
  // i VALUE IS RESET TO ZERO (NOT A PROBLEM YET, BUT IT WILL BE)
  for (i = 0; i < lines.length; i++) {
    rdline(lines[i])
  }
}
正是这个循环使用与第一个循环相同的全局
i
变量,允许
i
增加到36(第一次调用
rdline
。当
rdline
完成并返回到第一个循环时,
i
大于
行。长度
,因此第一个循环终止

解决方案是始终声明循环变量(最好是在循环中),如下所示:

当在同一范围内需要多个循环时,使用不同的循环变量。将函数
rdline
中的循环变量更改为不同的名称,并将其更改为该循环中的
var
,如下所示:

       // When multiple loops exist in the same scope,
       // always use a different counter for each loop!
       for(var x = 0; ...

请记住,在JavaScript中,默认情况下没有块级作用域(顺便提一下,您可以使用new
let
关键字创建块级作用域)。在函数中设置的未声明变量(无
var
)在两个(或更多)变量时变为全局变量,并且没有块级作用域(默认情况下)循环使用同一范围内的同一循环变量,一个循环将导致该范围内所有循环的计数器更改。

非常抱歉,但我的代码中的警报在var rdline=function(parg)之后请不要抱歉,将您的解决方案发布为答案,并将其标记为正确。这不是答案,在我编写本文时警报函数没有复制。我指出了警报在代码中的位置。您可以编辑问题并将其添加到代码中。在设置行中,currset为空。请尝试在数组中添加更多内容。
       // Notice the var?
       for(var i = 0; ...
       // When multiple loops exist in the same scope,
       // always use a different counter for each loop!
       for(var x = 0; ...