为什么变量不在for循环中更新? JS

时间:2017-11-03 17:14:25

标签: javascript template-literals

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

<h6>Q1</h6>
<h6>Q1</h6>
<h6>Q1</h6>

相反,实际结果是:

  function results () {

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

     for(x=0; x < 3; x++) {
        listResults += element;
        i++;
     }
     return listResults;
    }
    console.log(results())

&#13;
&#13;
yum install python34-devel
&#13;
&#13;
&#13;

6 个答案:

答案 0 :(得分:1)

一些问题。主要是,评估elementi0,因此element始终返回<h6>Q1</h6>

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

function results () {

 var listResults = '';

 for(x=0; x < 3; x++) {
  listResults += `<h6>Q${x+1}</h6>\n`;
 }
 return listResults;
}
console.log(results())

答案 1 :(得分:1)

解析表达式后立即评估模板。这样的事情可以奏效:

let listResults = [];
const element = i => `<h6>Q${i+1}</h6>`;

for(x=0; x < 3; x++) {
    listResults += element(x);
}

答案 2 :(得分:0)

主要问题是,当element等于i时,0会被分配一次。它永远不会更新(尽管每个循环都会i递增)。

此外,使用更现代的方法(如.map)会产生更可读的结果:

const results = () => [1, 2, 3]
    .map(i => `
        <h6>Q${i}</h6>
    `)
    .join('');

console.log(results());

答案 3 :(得分:0)

你有这个问题只是因为你每次撤销功能时都声明我变量,实际上每次你将它设置为0并继续。 所以,“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())

答案 4 :(得分:0)

一些ES6:

const results = _ => Array.from({length:3}, i => `<h6>Q${i+1}</h6>`).join("\n");

答案 5 :(得分:0)

尝试使用eval:

&#13;
&#13;
var element = "<h6>Q${i}</h6>";

var results = [1, 2, 3].map(function (i) {
  return eval('`'+element+'`');
});
console.log(results);
&#13;
&#13;
&#13;