29131


**下記コードで、

> () => this

はどういう意味でしょうか？**

* * *
[code]

      this.a = 0;
      baz(() => this);
    
[/code]


CC BY-SA 3.0
2016-09-26T01:54:34.697
29130
2016-09-27T01:50:13.510
2016-09-27T00:37:02.570
7886
7886
question
javascript ecmascript-6
「baz(() => this);」の「() => this」はどういう意味？


[アロー関数](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/arrow_functions)と呼ばれるECMAScript
6で導入された構文で、「引数のない`this`を返す無名関数」を作成しています。

前半の`()`は関数の仮引数宣言です。この場合は`()`ですので引数を取りませんが、一般的には`(a, b, c, ...,
z)`のように宣言します。また引数が1個の場合`a =>`のように括弧を省略することが出来ます。

後半の`this`は関数の本体で`{ return this; }`の省略形です。

またアロー関数には「 **アロー関数が作成されたときの`this`の値がアロー関数内部で使用される`this`の値になる**」という特徴があります。

仮に質問文のコードを`function`を使って

[code]

    baz(function () { return this });
    
[/code]

と書き換えると、`baz`内での引数の取り扱いによって関数内の`this`の値が変化してしまいます。

[code]

    function baz(fn) {
        console.log(fn()); // グローバルオブジェクトが出力される
    
        var obj = { fn: fn };
        console.log(obj.fn()); // objが出力される
    }
    
[/code]

これではなにかと不都合なので、呼び出し側で`this`参照を変数に置き換えたり、

[code]

    var _this = this;
    baz(function () { return _this; });
    
[/code]

関数に渡す引数に`this`となる値を含めて`Function.prototype.call`や`apply`を呼び出して実行するなどの方法がとられていました。

[code]

    baz(this.foo, this);
    
    // function baz(fn, thisArg)
    fn.call(thisArg);
    
[/code]

アロー関数では関数内の`this`はアロー関数式が実行されたときの`this`に束縛されるため、簡潔に匿名関数を定義して他の処理に渡すことが出来ます。


CC BY-SA 3.0
2016-09-26T02:09:22.863
29131
2016-09-27T01:50:13.510
2016-09-27T01:50:13.510
5750
5750
29130
answer