while

var i = 0
while(boolean) {
	i++
}

i=10
while(i--){// while(0) equals while(false)
	return i
}

for

for ([initialization]; [condition]; [final-expression]) {
	//The initialization statement is executed one time only before the loop starts
	//if condition starts as false, your loop will never execute.
	//The final-expression is executed at the end of each loop iteration
}

var i = 0
for(console.log(`initialization 可选`);true;console.log(`final-expression 可选`)) {
	i++; if(i>2){break;}
}

var i = 0
for(;true;) { i++; if(i>2){break;} }

for(console.log(`for`);;){}

//for ([执行一次的表达式]; [决定循环是否结束的判断]; [每一次循环都会执行的表达式]);
const array = [1,2,3,4,5]
for(let k, j, i = array.length; i; array[i-1] = array[i-1] * 2, j = i , k = i, i = --j, ++k, console.log(`i:${i}, j:${j}, k:${k}`));
// array 的值变成了[2, 4, 6, 8, 10]
// 展示for 循环不用花括号也能完成一些工作

do while

do {
  i++; //run at least once
}while (i < 5) //while has no {}

Recursion 递归,方法体内调用自己

//for
function multiply(arr, n) {
  var product = arr[0];
  for (var i = 1; i <= n; i++) {
      product *= arr[i];
  }
  return product;
}

//recursive
function multiply(arr, n) {
  if (n <= 0) {
    return arr[0];
  } else {
    return multiply(arr, n - 1) * arr[n];
  }
}

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Guide/Loops_and_iteration

// loops

// for(;;){}
// while(){}
// do...while()

// label/break/continue

// for...in, 遍历对象的所有可枚举的属性
  // for(index in object){} // for in 得到的是下标

// for...of, 遍历可迭代对象
  // for(item of object){} // for of 得到的是元素