Javascript"document.write"混乱

Javascript "document.write" confusion

我是 JavaScript 的新手,可能问了一个愚蠢的问题。但是从下面的代码返回的结果让我很困惑。我不确定为什么只有第一句显示 i 的值并且它在最后一个数字 3.

我在执行代码document.write('<h1>' + i + msg + '<h1>')的时候也很疑惑,为什么它不直接写入变量'msg'的聚合值呢? msg 的值没有被清除,它应该包含传递给它的第一个和第二个值,不是吗?这让我有点困惑,因为我掌握了一些 python 知识,但它的工作方式不同。

var scores = [24, 32, 47];
var scores = [24, 32, 47];
var scores = [24, 32, 47];

var arrayLength = scores.length;
var roundNumber = 0;

var msg = '';
var i;


for (i = 0; i < arrayLength; i++) {
  roundNumber = i + 1;
  msg += ' Round ' + roundNumber + ': ';
  msg += scores[i] + '<br>';
}

document.write('<h1>' + i + msg + '<h1>')

从 html 返回的结果:

3 Round 1: 24 
Round 2: 32 
Round 3: 47

我的预期结果:

0 Round 1: 24
1 Round 2: 32
2 Round 3: 47

你只输出了一次i。这就是为什么您只看到最后一个值的原因。

您需要将其添加到循环内的 msg

var scores = [24, 32, 47];
var scores = [24, 32, 47];
var scores = [24, 32, 47];

var arrayLength = scores.length;
var roundNumber = 0;

var msg = '';
var i;


for (i = 0; i < arrayLength; i++) {
  roundNumber = i + 1;
  msg += i + ' Round ' + roundNumber + ': ';
  msg += scores[i] + '<br>';
}

document.write('<h1>' +  msg + '<h1>')

你只需要将 i 添加到循环中的消息而不是之后,例如:

var scores = [24, 32, 47];
var arrayLength = scores.length;
var roundNumber = 0;
var msg = '';
var i;

for (i = 0; i < arrayLength; i++) {
  roundNumber = i + 1;
  msg += i +' Round ' + roundNumber + ': ';
  msg += scores[i] + '<br>';
}

document.write('<h1>' + msg + '<h1>')

document.write循环结束后运行。

确实输出msg的所有聚合内容。那不是问题。

出错的地方是 i 的使用 - 在循环结束后,您只能在输出中使用它一次。因此,您看到的只有循环结束时的最终值,因此它显示 3,并且只显示一次。

与每次循环运行时添加的 msg 不同(因为 += 将新内容附加到现有变量),i 的值被新的覆盖每次循环运行时的值(这就是 for 语法中的 i++ 所做的)。

要让它做你想做的事,你只需要在进行时将 i 值合并到 msg 中。

var scores = [24, 32, 47];
var msg = '';

for (let i = 0; i < scores.length; i++) {
  msg += i + ' Round ' + (i+1) + ': ' + scores[i] + '<br>';
}

document.write('<h1>' + msg + '<h1>')

P.S。我还稍微简化了代码——不清楚为什么你用相同的值声明同一个 scores 数组 3 次,并且 arrayLengthroundNumber 不需要作为单独的变量存在,并且当然不是那些在循环之外有作用域的。 i 也不再需要循环外的范围。