非同期処理におけるコールバック関数の利用方法については「非同期処理」の章で解説します。, オブジェクトのプロパティである関数をメソッドと呼びます。 Because functions create own execution context, often it is difficult to detect this value. そのため、同じ名前の関数を複数回宣言した場合には、後ろで宣言された関数によって上書きされます。, 次のコードでは、fnという関数名を2つ定義していますが、最後に定義されたfn関数が優先されています。 hello variable holds the function object and hello.name contains the function name: 'hello'. 次のコードでは、引数に渡された配列の1番目の要素がfirstに、2番目の要素がsecondに代入されます。, JavaScriptでは、関数は関数オブジェクトとも呼ばれ、オブジェクトの一種です。

一方、コールバック関数を引数として使う関数やメソッドのことを高階関数と呼びます。, たとえば、配列のforEachメソッドはコールバック関数を引数として受け取る高階関数です。 Function declaration function excuteMe() { console.log('Function Declaration') } // 2. It has some additional properties compared to simple function expression: Let’s use the above example, but set a name in the function expression: function funName(variable) {...} is a named function expression. Get the latest and greatest from MDN delivered straight to your inbox.

また関数が値を返す必要がない場合は、return文では返り値を省略できます。 This is nice because you don’t have to use .bind(this) or store the context var self = this when a function needs the enclosing context. 関数を利用することで、同じ処理を毎回書くのではなく、一度定義した関数を呼び出すことで同じ処理を実行できます。, これまで利用してきたコンソール表示をするConsole APIも関数です。

The functions created this way don’t have access to the current scope, thus closures cannot be created. If the function uses this from the enclosing function, the arrow function is a good solution. 関数の仮引数 (パラメータ) には、関数呼び出しにおいて実引数 (アーギュメント) が渡されます。実引数は、関数に「値渡し」されます: 関数の中で引数の値を変更しても、その変更はグローバルスコープもしくは呼び出し元の関数内には反映されません。オブジェクト参照も「値」ですが、こちらは特別です: 参照されているオブジェクトのプロパティを関数の中で変更すると、次の例にあるように、その変更を関数の外部から見ることができます: this キーワードは現在実行中の関数を参照しません。よって、関数内部であっても、名前によって Function オブジェクトを参照しなければなりません。, 関数式は、関数宣言と似ており、同じ構文を持っています (詳細は function 演算子を参照)。関数式はより大きな式の一部になることもあります。「名前付き」の関数式を定義することもできます(例えばその名前はコールスタック内で使われるかもしれません)し、「無名の」関数式を定義することもできます。関数式はスコープの開始時に「巻き上げ」られないので、コード内でそれらが登場するより前に使用することはできません。, 名前付きの関数式を作ることのメリットの 1 つは、エラーに遭遇したとき、スタックトレースがその関数の名前を含めるため、エラーの発生源をより容易に特定できるということです。, ここまで見てきたように、どちらの例も function キーワードから開始されていません。 function から開始せずに関数を含んでいる文が関数式です。, 関数を一度だけ使うときの一般的なパターンが IIFE (Immediately Invokable Function Expression) です。, ジェネレーター関数の宣言のための特別な構文です(詳細は function* 文 を参照してください)。, ジェネレーター関数式は、ジェネレーター関数宣言と似ており、同じ構文を持っています (詳細は function* 演算子 を参照してください)。. It’s just easier to read. このとき、引数として1つの値しか渡していない場合、残る仮引数にはundefinedが代入されます。, デフォルト引数(デフォルトパラメータ)は、仮引数に対応する引数が渡されていない場合に、デフォルトで代入される値を指定できます。 Hoisting is useful in some situations.

console.logは「受け取った値をコンソールへ出力する」という処理をまとめた関数です。, JavaScriptでは、関数を定義するためにfunctionキーワードを使います。 Otherwise it’s a function expression (see 2.).