循环

原文链接:https://github.com/jquery/learn.jquery.com/tree/v0.6.1/page/javascript-101/loops.md

循环让一块代码运行一定的次数:

for ( var i = 0; i < 5; i++ ) {
    // Logs "try 0", "try 1", ..., "try 4".
    console.log( "try " + i );
}

需要注意的是在循环中,变量 i 的不仅仅作用于循环代码块,即使在变量名前使用了关键字 var。在作用域部分将对作用域进行深入讨论。

for 循环

一个 for 循环由四个语句组成,并具有以下结构:

for ( [initialization]; [conditional]; [iteration] ) {

    [loopBody]

}

初始化语句(initialization)在循环开始前只执行一次。它是用来准备或声明任何变量的。

条件语句(conditional)在每次迭代之前执行,它会返回一个值用来判断循环是否继续。如果条件语句的计算结果为一个假值,则循环停止。

迭代语句(iteration)在每次迭代结束时执行,它给你一个机会来改变重要变量的状态。通常,这将涉及递增或递减一个计数器,从而使循环接近结束。

循环体语句(loopBody)是每一次循环执行的内容,它可以包含任何东西。通常,会有需要被执行的多行语句,并应包裹在一个代码块中({...})。

一个典型的 for 循环:

for (var i = 0, limit = 100; i < limit; i++) {
    // This block will be executed 100 times.
    console.log( "Currently at " + i );
    // Note: The last log will be "Currently at 99".
}

for...in 循环

一个 for...in 循环遍历一个对象的属性,针对每一个属性,循环体语句可以被执行一次。

for ( prop in obj ) {
    // statements here will be executed for every key in the object
    console.log( prop + ': ' + obj[ prop ] );
}

while 循环

一个 while 循环类似于一个 if 语句,不同之处在于它的主体部分会继续执行,直到条件语句计算结果为一个假值。

while ( [conditional] ) {

    [loopBody]

}

一个典型的 while 循环:

var i = 0;
while ( i < 100 ) {
    // This block will be executed 100 times.
    console.log( "Currently at " + i );
    i++; // Increment i
}

需要注意的是计数器是在循环的主体部分递增的。将条件和增量合并也是可行的,像这样:

var i = -1;
while ( ++i < 100 ) {
    // This block will be executed 100 times.
    console.log( "Currently at " + i );
}

请注意计数器开始于-1,并使用前置增量符(++i)。

do-while 循环

这几乎是与 while 循环完全一样的,不同的是实际上它的循环主体内容在条件测试之前至少会执行一次。

do {

    [loopBody]

} while ( [conditional] )

一个 do-while 循环:

do {
    // Even though the condition evaluates to false
    // this loop's body will still execute once.
    alert( "Hi there!" );

} while ( false );

这一类型的循环是少见的,因为只有极少数情况下需要盲目的执行一次循环。无论如何,意识到这一点就好。

breakcontinue

通常的,条件语句的计算结果不是一个真值会导致循环的终止,但是也可以通过循环内部的 break 语句将循环在其正常运行轨道期终止:

// Stopping a loop
for ( var i = 0; i < 10; i++ ) {
    if ( something ) {
        break;
    }
}

你可能还需要继续循环,但不执行循环主体内的部分内容。这可以通过 continue 语句做到:

// Skipping to the next iteration of a loop
for ( var i = 0; i < 10; i++ ) {
    if ( something ) {
        continue;
    }

    // The following statement will only be executed
    // if the conditional "something" has not been met
    console.log( "I have been reached" );

}
Fork me on GitHub