0

for 循环似乎运行良好,但未能更新元素变量。我的意图是:

<h6>Q1</h6>
<h6>Q2</h6>
<h6>Q3</h6>

相反,实际结果是:

<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())

4

6 回答 6

1

几个问题。主要是,当element被评估i时总是返回。0element<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())

于 2017-11-03T17:18:12.980 回答
1

解析表达式后立即评估模板。像这样的东西可以工作:

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

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

于 2017-11-03T17:21:54.903 回答
0

主要问题是element分配一次,何时i等于0。它永远不会在此之后更新(尽管i每个循环都会增加)。

此外,使用更现代的方法,如.map产生更具可读性的结果版本:

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

console.log(results());

于 2017-11-03T17:21:36.400 回答
0

你有这个问题只是因为你每次撤销函数时都声明 i 变量,实际上每次你将它设置为 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())
于 2017-11-03T17:36:15.830 回答
0

一些 ES6:

const results = _ => Array.from({length:3}, i => `<h6>Q${i+1}</h6>`).join("\n");
于 2017-11-03T17:39:31.897 回答
0

使用 eval 试试这个:

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

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

于 2017-11-03T17:42:28.920 回答