日別アーカイブ: 2017/10/10

JavaScript Arrow Function

前回 Gjs の ES6 がって書いたけど。
よく考えたら現在 JavaScriptCore や V8 も試せる環境じゃないか。
現状 (2017.10.10) ではどうなのか実験。

Gjs(SpiderMonkey) は 1.48.7
Node.js(V8) は dnf で入る v6.11.3
JavaScriptCore はワカラン、Fedora 26 の /usr/libexec/webkit2gtk-4.0/jsc
jjs(nashorn) は1.8.0_144、–language=es6 オプションで。

jsc は .bashrc にエイリアスを作って準備してと。
Node.js だけ console.log なのを無理矢理 print となるようにしてと。

とりあえず無名関数とアロー関数での this スコープの違い。

// @ Node.js
if (typeof print === "undefined")
    print = console.log; 

let obj = {
    func: function () {
        this.str = "優木苗";
 
        let funcA = function () {
            print(this.str);
        };
        let funcB = () => {
            print(this.str);
        };
        funcA();
        funcB();
    }
};
obj.func();

jjs はアロー関数に対応していなかった。
他は全部対応済なのね、ふむふむ。
Gjs はワーニングを出してくれる親切仕様、イラネーけど。

次は同一ブロックでの let 変数名の多重定義。

// @ Node.js
if (typeof print === "undefined")
    print = console.log; 

let n = 13;
let n = 99;
//n = 66;
print(n);

って、おい SpiderMonkey!
jjs ですらエラー判定するのに、まあ次は対応済と解っているけど。
それにしても Node.js のエラー表示はウゼェ。

次に class を作ってみよう、Gjs はまだ対応していないと解っているけど。

// @ Node.js
if (typeof print === "undefined")
    print = console.log; 

class Test {
    constructor(str) {
        print(str);
    }
}
let test = new Test("むったん");

だよね。
JavaScript の仕様策定は Mozilla がやっているはずなのにな。