JavaScriptの関数定義と呼び出しとthisをもういちどおもいださないといけにゅ
> The arrow function syntax does not have access to arguments or this.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions
うむわからん (=>以外で定義された関数はthisで実行時のレシーバを得ることができるんだっけな)
$ cat f.js
x = {
x: "x",
f: function() { console.log(this) },
a: () => { console.log(this) }
}
x.f()
x.a()
y = {
y: "y",
f: x.f,
a: x.a
}
y.f()
y.a()
$ node f.js
{ x: 'x', f: [Function: f], a: [Function: a] }
{}
{ y: 'y', f: [Function: f], a: [Function: a] }
{}
それにつけても省略形の多さよ
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions#syntax
> () => expression
>
> param => expression
>
> (param) => expression
>
> (param1, paramN) => expression
>
> () => {
> statements
> }
>
> param => {
> statements
> }
>
> (param1, paramN) => {
> statements
> }
引数が1個の場合は()を省略できる、文が1個の場合は{}を省略できる、と思えばいいのかしら。
@zundan 文というとstatementに聞こえるけど、expressionが1個の場合は、ですかね。そしてオブジェクトリテラルを書きたくなるが {} が紛らわしいので怒られる…それでもreturnをサボりたいと x => ({ y: x + 1 }) みたいなことを書きがち…
@unarist ですです。expressionの日本語を思い出せなくて文と書いちゃったのですが式でしたねー。そうか、expressionの場合はreturnが省略されてるんだ。