関数は、モジュール式の再利用可能なステートメント ブロックで、 引数に基づく値の計算や返しなど、関連するタスクに関連するタスク 渡されます。すべての非プリミティブ値と同様に、 オブジェクトです。呼び出せるという点で、一意のオブジェクトです。 コードを実行する(引数の形式でデータを渡す) 値を返す。
関数は「ファースト クラス」とみなされる つまり、その固有の動作にもかかわらず、すべての環境で使用できます。 他の JavaScript オブジェクトと同じコンテキストを使用します。たとえば、関数は 他の関数に引数として渡されて返される 使用できます。
function myFunction() {
console.log( "This is my function." );
};
オブジェクトのプロパティとして定義される関数は、
通常は「メソッド」と呼ばれます。var
を使用して宣言された変数と同様に、
包含する関数の外側で作成された関数宣言は、
メソッドとしてグローバル オブジェクト。
関数宣言
関数宣言(「関数ステートメント」または「関数定義」とも呼ばれます)
は、含まれるスコープの他の場所で呼び出すことができる名前付き関数を作成します。
関数宣言は、function
キーワードの後に
ID、かっこで囲まれたカンマ区切りのパラメータのリスト、
ブロック ステートメントです。
“関数本体”です関数宣言の中には、含まれていないものが
末尾がセミコロンである関数宣言はステートメントであり、
セミコロンは ASI によって推測されます。
function myFunction() {
console.log( "This is my function." );
};
myFunction();
> "This is my function."
JavaScript の初期設計上の決定事項である関数宣言
同じレガシー ホイスティングの対象になります。
var
で宣言された変数と同じように動作します。つまり、関数宣言は
スコープの一番上にホイスティングされ、
そのスコープが strict モードで管理されているかどうかにかかわらず、以下のようになります。
"use strict";
{
myFunction();
function myFunction() {
console.log( "This is my function." );
};
}
> "This is my function."
厳格モード外、関数 JavaScript の従来のスコープ設定を使用 つまり、関数宣言のスコープは、その関数の中で最も近い 関数:
function myFunction() {
function myNestedFunction() {
console.log( "This is my nested function." );
}
myNestedFunction();
};
myFunction();
> "This is my nested function."
myNestedFunction();
>Uncaught ReferenceError: myNestedFunction is not defined
厳格モードでは、関数宣言
変数のスコープには、
let
または const
:
"use strict";
{
function myFunction() {
console.log( "This is my function." );
};
}
myFunction();
> Uncaught ReferenceError: myFunction is not defined
関数呼び出し
変数と同様に、関数を宣言するときに使用される識別子は、 値のシンボリック名で識別されます。識別子のみで関数を参照すると、次の結果が返されます。 関数オブジェクトのみを実行し、そこに含まれる関数は実行しません。
function myFunction() {
console.log( "This is my function." );
};
myFunction;
> myFunction() {
console.log( "This is my function." );
}
関数本体内のコードを実行するには、関数を呼び出します(または呼び出します)。 次のように、対応するかっこで関数名を続けます。
function myFunction() {
console.log( "My function has been executed." );
}
myFunction();
> "My function has been executed."
関数定義のパラメータは、変数のプレースホルダ変数として 関数の呼び出し時に関数本体に渡すことができる値。 関数を呼び出すときのかっこ内の値は「引数」である(ただし、 「arguments」という名前の引数とパラメータの両方を記述するために使用される ドキュメントをご覧ください)。
function myFunction( myParameter ) {
console.log( `The value is: ${ myParameter }.` );
};
myFunction( "this string" );
> "The value is: this string."
想定されている引数が省略されている場合、生成されるパラメータには
undefined
値。パラメータは関数本体に対して宣言されますが、
値で初期化されていない:
function myFunction( myParameter ) {
console.log( `The value is: ${ myParameter }.` );
};
myFunction();
> "The value is: undefined."
デフォルトのパラメータ値を設定するには、
変数を初期化します。つまり、代入演算子(=
)の後に値が続きます。もし
後でその関数の引数を指定すると、新しい値によって
デフォルト値:
function myFunction( myParameter = "omitted" ) {
console.log( `The value is: ${ myParameter }.` );
};
myFunction( "this string" );
> "The value is: this string."
myFunction();
> "The value is: omitted."
矢印以外の本文
関数もアクセスできる場合はゼロ番号の番号が付けられ、
配列のような arguments
オブジェクト
関数が渡されたかどうかにかかわらず、引数として渡された
次のパラメータを指定します。
function myFunction() {
console.log( arguments );
};
myFunction( 3, true, "My string" );
> Arguments { 0: 3, 1: true, 2: "My string", … }
可変関数
arguments
オブジェクトを使用すると、基本的な可変関数を作成して、
可変長引数を指定できます。
function myFunction() {
let result = "";
for (let i = 0; i < arguments.length; i++) {
result += arguments[i] + " - ";
}
console.log( result );
};
myFunction( "My first string", "My second string", "my third string" );\
> "My first string - My second string - my third string - "
しかし、このような可変関数へのアプローチが最新の JavaScript ではほとんど使用されていません。 必要があります。一般的には、より新しく読みやすい rest パラメータの構文 これは、任意の引数を含む配列として初期化される名前付きパラメータを作成します。 次のことができます。
function myFunction( mySeparator, ...myStrings ) {
console.log( myStrings.join( mySeparator ) );
};
myFunction( " - ", "My first string", "My second string", "my third string" );
> "My first string - My second string - my third string"
parameter
バインディングとは異なり、アロー関数パラメータを使用すると、残りパラメータの構文は想定どおりに機能します。
function myOuterFunction() {
let myInnerArrowFunction = ( ...myParams ) => {
console.log( myParams[ 0 ] );
}
myInnerArrowFunction( true );
};
myOuterFunction( false );
> true
let myArrowFunction = ( ...myParams ) => {
console.log( myParams[ 0 ] );
};
myArrowFunction( true );
> true`
``