我测试一些代码,我需要一个逻辑为我的程序,但我在一个单独的arquive测试,我得到了以下问题:
let numero = 0;
const string = `aaa: ${numero}`
for(let i=0; i<3;i++) {
console.log(string)
numero += 1
}
console.log(numero)
但结果是:
aaa: 1
aaa: 1
aaa: 1
4
- 为什么循环是加法,但在字符串中继续用值1?
有人可以解释我的错误是什么?javascript有时真的很奇怪xD
4条答案
按热度按时间wecizke31#
在for之后写入串=
aaa: ${numero}
(令i=0; i〈3;i++)它这样做的原因是因为numero在for循环中发生了变化,但字符串是在for循环之外声明的,因此是常量。
3wabscal2#
这个行为的原因- scope。当你在循环中使用console.log时,你会从全局范围得到numero = 0。
只需使用以下代码:
pb3s4cty3#
原因有二:
具体到您的情况:您在循环 * 之外赋值,这意味着
string
只赋值一次,因此它永远不会改变。此外,
string
是一个常量,从技术上讲不应该改变(也有例外,例如当常量是一个对象或数组时)。如果你试图改变它(在循环中),你会得到一个错误。不要使用const
,而是使用let
,因为你想改变它。ki1q1bka4#
问题是当你设置
string
变量时,它使用的是一个字符串文字,这个字符串文字只使用你创建它时的值x1m1 n1. -.0
。它不会动态地更新自己。你有两个选择
1.将
string
从const
更改为let
,以便可以更改其值,并在for循环中更新string
变量的值,如下所示:1.创建一个函数,每次在for循环中调用它时,它都会返回更新的字符串,如下所示: