Javascript 为什么变量没有在for循环中更新?JS

Javascript 为什么变量没有在for循环中更新?JS,javascript,template-literals,Javascript,Template Literals,for循环似乎运行正常,但无法更新元素变量。 我的意图是: <h6>Q1</h6> <h6>Q2</h6> <h6>Q3</h6> Q1 问题2 第三季度 相反,实际结果是: <h6>Q1</h6> <h6>Q1</h6> <h6>Q1</h6> Q1 Q1 Q1 函数结果(){ var listResults=''; var i=0; 常量元

for循环似乎运行正常,但无法更新元素变量。 我的意图是:

<h6>Q1</h6>
<h6>Q2</h6>
<h6>Q3</h6>
Q1
问题2
第三季度
相反,实际结果是:

<h6>Q1</h6>
<h6>Q1</h6>
<h6>Q1</h6>
Q1
Q1
Q1
函数结果(){
var listResults='';
var i=0;
常量元素=`
Q${i+1}
`;
对于(x=0;x<3;x++){
listResults+=元素;
i++;
}
返回列表结果;
}

console.log(results())
一些问题。主要是,当计算
元素
i
0
所以
元素
总是返回
Q1

您可以将模板文字直接附加到输出,如下所示:

函数结果(){
var listResults='';
对于(x=0;x<3;x++){
listResults+=`Q${x+1}\n`;
}
返回列表结果;
}

console.log(results())
一些问题。主要是,当计算
元素
i
0
所以
元素
总是返回
Q1

您可以将模板文字直接附加到输出,如下所示:

函数结果(){
var listResults='';
对于(x=0;x<3;x++){
listResults+=`Q${x+1}\n`;
}
返回列表结果;
}

console.log(results())
主要问题是当
i
等于
0
时,
元素
被赋值一次。除此之外,它永远不会更新(尽管
i
随着每个循环而递增)

此外,使用更现代的方法,如
.map
,可以获得更具可读性的结果:

const results=()=>[1,2,3]
.map(i=>`
Q${i}
`)
.加入(“”);

log(results())主要问题是当
i
等于
0
时,
元素
分配一次。除此之外,它永远不会更新(尽管
i
随着每个循环而递增)

此外,使用更现代的方法,如
.map
,可以获得更具可读性的结果:

const results=()=>[1,2,3]
.map(i=>`
Q${i}
`)
.加入(“”);

log(results())解析表达式后立即计算模板。类似这样的方法可能会奏效:

让listResults=[];
常量元素=i=>`Q${i+1}`;
对于(x=0;x<3;x++){
listResults+=元素(x);

}
解析表达式后立即计算模板。类似这样的方法可能会奏效:

让listResults=[];
常量元素=i=>`Q${i+1}`;
对于(x=0;x<3;x++){
listResults+=元素(x);

}
出现此问题的唯一原因是,每次撤销函数时,以及实际上每次将其设置为0并继续时,都要声明i变量。 因此,“i”变量必须在函数外(声明之前)声明(而不是在函数内) 每次调用函数时,它的值都会增加一个

var i=0;
function results () {

     var listResults = '';
     const element = `
      <h6>Q${i+1}</h6>
     `;

     for(x=0; x < 3; x++) {
        listResults += element;
        i++;
     }
     return listResults;
    }
console.log(results())
var i=0;
函数结果(){
var listResults='';
常量元素=`
Q${i+1}
`;
对于(x=0;x<3;x++){
listResults+=元素;
i++;
}
返回列表结果;
}
console.log(results())

出现此问题的唯一原因是,每次撤销函数时,以及实际上每次将其设置为0并继续时,都要声明i变量。 因此,“i”变量必须在函数外(声明之前)声明(而不是在函数内) 每次调用函数时,它的值都会增加一个

var i=0;
function results () {

     var listResults = '';
     const element = `
      <h6>Q${i+1}</h6>
     `;

     for(x=0; x < 3; x++) {
        listResults += element;
        i++;
     }
     return listResults;
    }
console.log(results())
var i=0;
函数结果(){
var listResults='';
常量元素=`
Q${i+1}
`;
对于(x=0;x<3;x++){
listResults+=元素;
i++;
}
返回列表结果;
}
console.log(results())
一些ES6:

const results = _ => Array.from({length:3}, i => `<h6>Q${i+1}</h6>`).join("\n");
constresults=\u=>Array.from({length:3},i=>`Q${i+1}`)。join(“\n”);
一些ES6:

const results = _ => Array.from({length:3}, i => `<h6>Q${i+1}</h6>`).join("\n");
constresults=\u=>Array.from({length:3},i=>`Q${i+1}`)。join(“\n”);
尝试使用eval:

var element=“Q${i}”;
var results=[1,2,3].map(函数(i){
返回eval('`+element+'`');
});
控制台日志(结果)使用eval尝试此操作:

var element=“Q${i}”;
var results=[1,2,3].map(函数(i){
返回eval('`+element+'`');
});

控制台日志(结果)i
的值必须为
0
。如果要得到不同的结果,必须在循环中定义模板文字。可能需要在for循环中移动
const元素=…
。因为在计算模板文字时
i
的值必须为
0
。如果你想得到不同的结果,你必须在循环中定义模板文字。你可能想在for循环中移动
const-element=…
。我认为在循环中声明变量是不明智的。事实并非如此。另一件不明智的事情是重新分配
常量
。我认为在循环中声明变量是不明智的。事实并非如此。另一件不明智的事情是重新分配
常量
。在这种情况下,不需要使用
eval
。请不要推广使用
eval
。在这种情况下不需要使用
eval
。请不要推广使用
eval