■
最近早起きのyamanekoです!
朝のコーヒーとタバコがうめー!!!
ふと思ったので書き留めておく.
なんか,javascriptの関数の引数の式の評価順序が気になった.
例を出そう.
var array = [3, 4, 5]; (function (a, b) { document.writeln ("a : " + a + ", b : " + b); } (array.shift (), array)); // 結果 // a : 3, b : 4,5
おお,予想どおりだった.やはり関数の引数の評価は先頭から行われるようだ.
ちなみに,この結果はGoogleV8のシェルでの動作であって,もし他の環境で評価順序が変わったら,プログラムの解釈が異なって怖い.
で,調べてみる.
オライリー刊DavidFlanagan著JavaScriptのP124第3パラグラフをみると,こう書かれている.
関数を呼び出すと,括弧(())内に引数として指定した式が順に評価され,評価結果の値が関数へ渡す引数として使われます.
どうやら言語仕様でそう定められているようだ.多分.すると,
var array = [3, 4, 5]; (function () { for (var i = 0; i < arguments.length; i++) { document.writeln (arguments[i]); } } (array.pop (), array.pop (), array.pop ())); // 結果 // 3 4 5 document.writeln (array.length); // 結果 // 0
とか意味の無い事を書いても全く問題ないわけだ.
...でも,アレをナニ風味に書くなら,意味が有るかもしれない.
その辺はまた今度.