読者です 読者をやめる 読者になる 読者になる

Panda Noir

JavaScript の限界を究めるブログです。

forの実行順序検証

仕様書読むのが面倒だったのでコードにて検証してみました。

検証用コード

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;
}

よいこのみんなはまねしないでね。