仕様書読むのが面倒だったのでコードにて検証してみました。
検証用コード
var count=3; var log = console.log.bind(console); for(Var();Exp();Inc()){ Exec(); } function Var(){log("var");return false;} function Exp(){log("exp", count);return count--;} function Inc(){log("inc");return false;} function Exec(){log("exec");return false;}
実行結果はこちら
var exp3 exec inc exp2 exec inc exp1 exec inc exp0
これを見ると、まずはじめの文が評価され、次に2番目の文が評価され、その後実行部が実行され、最後に3番目の文が評価されるという流れのようです。
その後は2番目の文、実行部、3番目の文という順で評価されていくようです。毎回どうだっけと思っていたのでスッキリしました。まあ、トリッキーなことをしようとしない限り基本は必要のない知識ですが。
トリッキーなことをしようとした例:
function lastIndexOf(arr, val){ for (var len = arr.length; len--;){ if (arr[len] === val) return len; } return -1; }
len–が0(falsyな値)を返すまで回します。 普通に書くとこうなります。
function lastIndexOf(arr, val){ for (var len = arr.length - 1; len >= 0; len--){ if (arr[len] === val) return len; } return -1; }
よいこのみんなはまねしないでね。