Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/452.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
可以分段运行循环吗?-JavaScript_Javascript - Fatal编程技术网

可以分段运行循环吗?-JavaScript

可以分段运行循环吗?-JavaScript,javascript,Javascript,因为我对js还是一个新手,所以我认为向更有经验的程序员询问如何改进我的编码习惯并学习有效的基础知识不会有什么坏处 所以我想知道我是否可以运行,比如说在一个循环中运行2行代码x次,然后在块的其余部分运行x次 因此,与此相反: for (let i = 0; i <= 10; i++) { this.shapes[i].x -= 1; this.shapes[i].draw(this.ctx); } for (let i = 0; i <= 10; i++) {

因为我对js还是一个新手,所以我认为向更有经验的程序员询问如何改进我的编码习惯并学习有效的基础知识不会有什么坏处

所以我想知道我是否可以运行,比如说在一个循环中运行2行代码x次,然后在块的其余部分运行x次

因此,与此相反:

for (let i = 0; i <= 10; i++) {
    this.shapes[i].x -= 1;
    this.shapes[i].draw(this.ctx);
}

for (let i = 0; i <= 10; i++) {
    this.shapes[i].x += 1;
    this.shapes[i].draw(this.ctx);
}

for(让i=0;i你可以定义更多的变量,然后
i

for (let i = 0, j=0; i <= 10; i++, j+= 2) {

    console.log(i, j);
}

for(让i=0,j=0;i可以循环20次而不是10次,然后运行第一个代码,如果
i两个循环的主体之间的唯一区别似乎是一条语句

您可以使用一些数学来确定索引,使用一些逻辑语句来确定该值应该递增还是递减,下面是一个示例:

for (let i = 0; i <= 21; i++) {
    const index = i % 11;
    this.shapes[index].x += (i > 10) ? 1 : -1;
    this.shapes[index].draw(this.ctx);
}

for(设i=0;i10)?1:-1;
this.shapes[index].draw(this.ctx);
}

如果是完全相同的代码,您可以像这样重构它:

for (let delta of [-1, +1]) {
  for (let i = 0; i <= 10; i++) {
    this.shapes[i].x += delta;
    this.shapes[i].draw(this.ctx);
  }
}
for(让δ[-1,+1]){
for(设i=0;i{

对于(设i=0;i),您始终可以将一个块封装在类似
if的内容中(i@DBS,哦,对了,我忘了提到我想先运行第1节10次,然后再运行第2节10次。顺序很重要。如果你需要在第2节开始之前完成第1节的所有迭代,那么组合它们通常不值得额外的复杂度。@DBS,我明白了,谢谢!我认为Maheer的建议很好ty也很聪明。OP的循环使用
i虽然这确实结合了循环,但它实际上并不会节省您任何计算时间,也不会使代码更易于阅读。因此我认为您最好将循环分开。@DBS有趣,泰特斯的答案如何,会更快/更慢吗?您将如何进行测试?@FrankPettersson the速度上的差异可以忽略不计。@FrankPettersson您可以使用类似于比较不同代码段的工具,尽管通常在这样的小循环中,差异非常小,不会产生任何影响。
for (let i = 0; i <= 21; i++) {
    const index = i % 11;
    this.shapes[index].x += (i > 10) ? 1 : -1;
    this.shapes[index].draw(this.ctx);
}

for (let delta of [-1, +1]) {
  for (let i = 0; i <= 10; i++) {
    this.shapes[i].x += delta;
    this.shapes[i].draw(this.ctx);
  }
}
changeShapeByDelta = (delta) => {
  for (let i = 0; i <= 10; i++) {
    this.shapes[i].x += delta;
    this.shapes[i].draw(this.ctx);
  }
}
changeShapeByDelta(-1);
changeShapeByDelta(+1);