【问题标题】:Javascript prints value in loop though the print is outside the loop通过打印循环中的Javascript打印值在循环之外
【发布时间】:2022-01-18 07:49:39
【问题描述】:

之前有人问过这个问题:Trouble understanding what happens during javascript for loop 但是提问者没有得到正确的答案,我也是。我之前学习了 C++ 和 Python,所以我熟悉循环,但是当我练习这段代码时:

let text = "";
let i;
for(i=0; i<5; i++)
{text += "The number is " + i + " ";}
document.write(text);

输出与我的预期完全不同。我访问了 W3schools 但我找不到答案 https://www.w3schools.com/js/js_loop_for.asp

https://www.w3schools.com/js/tryit.asp?filename=tryjs_loop_for_om3

我预计输出是“”,因为文本无法更改,但代码打印出:“数字为 0,数字为 1,数字为 2,数字为 3,数字为 4”。我的问题是,为什么打印在循环之外却在循环中执行?非常感谢!

【问题讨论】:

  • 您不会在循环中打印。您不断向名为 text 的变量添加更多内容,并且在循环结束后只打印一次
  • 感谢您的回答,但为什么 text 不是空字符串,因为它被初始化为 text = ""?
  • 循环将在您的 document.write 之前完全执行,因此您的所有连接都将适用
  • 我完全忘记了文本已重新分配。我对上下文字符串是不可变的,无法替换其中的字符感到困惑。谢谢!

标签: javascript


【解决方案1】:

打印按预期执行:最后只执行一次。在循环中,每次将一个额外的部分附加到text。那就是:

[iteration 0] ""
[iteration 1] "The number is 0 "
[iteration 2] "The number is 0 The number is 1"
[iteration 3] "The number is 0 The number is 1 The number is 2"
etc.

最后,您打印最终的字符串,它是您“粘合”在一起的所有部分字符串的串联。

x += y 与说x = x + y 是一样的。标准变量(var 和 let)仍然是可变的,所以如果你将它初始化为一个空字符串,你仍然可以在以后追加/替换它。

尝试将text 改为const,应该有一个运行时TypeError,因为您尝试重新分配一个常量。

【讨论】:

  • “Javascript 字符串是不可变的”怎么样?我打印了text变量,应该是空字符串,为什么会打印出循环添加的字符串?
  • 我完全忘记了文本已重新分配。我对上下文字符串是不可变的,无法替换其中的字符感到困惑。谢谢!
【解决方案2】:

为什么输出不是空字符串,因为在 for 循环之后文本变量不再为空。您在循环时分配了字符串,因此文本变量不再为空

【讨论】:

  • 感谢您的指出!我完全忘记了文本被重新分配了。我对上下文字符串是不可变的,无法替换其中的字符感到困惑。谢谢!
猜你喜欢
  • 1970-01-01
  • 2017-06-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-29
  • 2022-01-24
  • 2017-04-20
相关资源
最近更新 更多