admin管理员组文章数量:1429543
The for loop seems to run fine but fails to update the element variable. My intention was:
<h6>Q1</h6>
<h6>Q2</h6>
<h6>Q3</h6>
Instead, the actual result was:
<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())
The for loop seems to run fine but fails to update the element variable. My intention was:
<h6>Q1</h6>
<h6>Q2</h6>
<h6>Q3</h6>
Instead, the actual result was:
<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())
Share
Improve this question
edited Nov 3, 2017 at 17:51
Dale
1,95111 silver badges18 bronze badges
asked Nov 3, 2017 at 17:14
user3558349user3558349
151 silver badge4 bronze badges
3
-
4
Because at the moment the template literal is evaluated
i
has to the value0
. If you want to get different result you have to define the template literal inside the loop. – Felix Kling Commented Nov 3, 2017 at 17:16 -
You probably want to move
const element = …
inside the for loop. – helb Commented Nov 3, 2017 at 17:17 - 1 stackoverflow./questions/30003353/… – epascarello Commented Nov 3, 2017 at 17:18
7 Answers
Reset to default 2A few issues. Mainly, when element
is evaluated i
is 0
so element
always returns <h6>Q1</h6>
.
You can append the template literal directly to the output like this:
function results () {
var listResults = '';
for(x=0; x < 3; x++) {
listResults += `<h6>Q${x+1}</h6>\n`;
}
return listResults;
}
console.log(results())
The template is evaluated as soon as the expression is parsed. Something like this could work:
let listResults = [];
const element = i => `<h6>Q${i+1}</h6>`;
for(x=0; x < 3; x++) {
listResults += element(x);
}
you have this problem only because you are declaring i variable every time you revoke function , and actually every time you are setting it to 0 and continuing . so, the "i" variable must be declared out of(and before declaring) function (not in it) and every time you invoke function, it's value will be added by one.
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())
Some ES6:
const results = _ => Array.from({length:3}, i => `<h6>Q${i+1}</h6>`).join("\n");
try this using eval:
var element = "<h6>Q${i}</h6>";
var results = [1, 2, 3].map(function (i) {
return eval('`'+element+'`');
});
console.log(results);
The main issue is that element
is assigned once, when i
is equal to 0
. It never gets updated beyond that (despite i
incrementing with each loop).
Furthermore, using a more modern method like .map
yields a much more readable version of your oute:
const results = () => [1, 2, 3]
.map(i => `
<h6>Q${i}</h6>
`)
.join('');
console.log(results());
You can use For OF instead of For LOOP :
for (let variable of iterable) {
// code block to be executed
}
It lets you loop over iterable data structures such as Arrays, Strings, Maps, NodeLists, and more
本文标签: javascriptWhy is the variable not updating within a for loop JSStack Overflow
版权声明:本文标题:javascript - Why is the variable not updating within a for loop? JS - Stack Overflow 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/web/1745547177a2662760.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论