最近早起きの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

とか意味の無い事を書いても全く問題ないわけだ.

...でも,アレをナニ風味に書くなら,意味が有るかもしれない.

その辺はまた今度.