let i = 0; do { i += 2; } while (i < 10);在这个例子中,只要 i 小于 10,循环就会重复实行。i 从 0 开始,每次循环递增 2。
3、for语句
概念
for 语句也是先测试语句,只不外增长了进入循环之前的初始化代码,以及循环实行后要实行的表达式。
语法
for (initialization; expression; post-loop-expression) statement实例
let count = 10; for (let i = 0; i < count; i++) { console.log(i); }以上代码在循环开始前界说了变量 i 的初始值为 0。然后求值条件表达式,如果求值结果为** true**(i < count),则实行循环体。因此循环体也大概不会被实行。如果循环体被实行了,则循环后表达式也会实行,以便递增变量 i。
三、注意
1、在 for 循环的初始化代码中,着实是可以不利用变量声明关键字的。不外,初始化界说的迭代器变量在循环实行完成后险些不大概再用到了。因此,最清晰的写法是利用 let 声明迭代器变量,如许就可以将这个变量的作用域限定在循环中。
2、初始化、条件表达式和循环后表达式都不是必需的。因此,可以创建一个无穷循环如下:
for (;;) { // 无穷循环 doSomething(); }3、如果只包罗条件表达式,那么 for 循环实际上就变成了 while 循环。如下:
let count = 10; let i = 0; for (; i < count; ) { console.log(i); i++; }4、do-while循环和while循环很相似。区别是在while循环里,先辈行条件判定再实行循环体中的代码,而在do-while循环里,是先实行循环体中的代码再判定循环条件。do-while循环至少会让循环体中的代码实行一次。
5、循环语句皆可相互嵌套,但制止嵌套多层。
四、break和continue语句
let num = 0; for (let i = 1; i < 10; i++) { if (i % 5 == 0) { break; } num++; } console.log(num); // 4如果将 break 换成 continue,则会出现差别的结果:
let num = 0; for (let i = 1; i < 10; i++) { if (i % 5 == 0) { continue; } num++; } console.log(num); // 83、区别
var sum = 0;for(var i=0;i<100;i++) { sum += i;}固然有这么多行,纵然 for 循环实行了 100 次,但是代码的实行时间不随 n 的增大而增长,以是如许的代码复杂度就为 O(1)。
线性阶
for(let i = 0;i < n; i++){ let j = i; j++;}这段代码在实行时,for循环内里的代码会实行n次,以是它斲丧的时间会随着n的厘革而厘革,如许的代码都可以用O(n)来表现。
对数阶
let i = 1; while(i < n) { i = i * 2; }这段代码在实行时,while循环内里,每次都将 i * 2 ,乘完之后, i 会隔断 n 越来越近,不停到 i 大于 n 为止。如许的代码都可以用O(logN)来表现。
线性对数阶
for(let k = 0; k < n; k++) { let i = 1; while(i < n) { i = i * 2; } }线性对数阶O(nlogN) 着实非常容易明白,将时间复杂度为O(logn)的代码循环N遍的话,那么它的时间复杂度就是 n * O(logN),也就是了O(nlogN)。
平方阶乘
for(let i = 0; i < n; i++) { for(let i = 1; i < n; i++) { let j = i; j++; }}平方阶O(n²) 就更容易明白了,如果把 O(n) 的代码再嵌套循环一遍,它的时间复杂度就是 O(n²) 了。