A for loop without any {}

后端 未结 6 1899
借酒劲吻你
借酒劲吻你 2020-12-10 18:10

So I was reading about shuffling an array. And then I came across this script:

shuffle = function(o){ //v1.0
    for(var j, x, i = o.length; i; j = parseInt(         


        
6条回答
  •  忘掉有多难
    2020-12-10 18:37

    What follows the for () can be any statement; that can be something with curly braces, or it can be a single expression, or it can be an empty expression. for (...); is equivalent to for (...) {}. Naturally, this should only be used in conjunction with a for-loop which will terminate naturally, or you'll have an infinite loop on your hands.

    The commas are effectively second-grade semicolons; they make for mostly-separate statements, but which will work in a for loop (and elsewhere; this is a very sloppy definition of them).

    for (
         // initialisation: declare three variables
         var j, x, i = o.length;
         // The loop check: when it gets to ``!i``, it will exit the loop
         i;
         // the increment clause, made of several "sub-statements"
         j = parseInt(Math.random() * i),
         x = o[--i],
         o[i] = o[j],
         o[j] = x
    )
        ; // The body of the loop is an empty statement
    

    This could be put in a more readable form as:

    for (
         // initialisation: declare three variables
         var j, x, i = o.length;
         // The loop check: when it gets to ``!i``, it will exit the loop
         i;
         // note the increment clause is empty
    ) {
         j = parseInt(Math.random() * i);
         x = o[--i];
         o[i] = o[j];
         o[j] = x;
    }
    

    As a while loop, that could be:

    var j, x, i = o.length;
    while (i) {
         j = parseInt(Math.random() * i);
         x = o[--i];
         o[i] = o[j];
         o[j] = x;
    }
    

提交回复
热议问题