関数式は関数
式が想定される場所に作成されます。関数式は、変数に代入される値としてよく使用されます。関数宣言は、
には名前が必要です。関数式を使用して匿名 ID を作成できます。
ID を省略し、function
キーワードの後に
オプションのパラメータを含むかっこのペア:
const myVariable = function() { };
それらのユーザーに電話して 関数式を変数 ID で表します。
const myVariable = function() {
console.log( "This is my function." );
};
myVariable();
> "This is my function."
関数式を使用して、構文を使って名前付き関数を作成することもできます。 関数宣言に似ています。
const myVariable = function myFunction() {
console.log( "This is my function." );
};
myVariable();
> "This is my function."
ただし、関数宣言とは異なり、名前付き関数式は 関数内でのみ関数名でアクセスします。
const myVariable = function myFunction() {
console.log( `I'm a ${ typeof myFunction }.`);
};
typeof myFunction;
> "undefined"
typeof myVariable;
> "function"
myVariable();
> "I'm a function."
関数式に関連付けられた名前は、主にデバッグに役立ちます。 名前付き関数式は、自身を再帰的に呼び出すこともできますが、これは 一般的なユースケースの一つです。
const myVariable = function myFunction() {
console.log( "One second elapsed." );
setTimeout( myFunction, 1000 );
};
setTimeout( myVariable, 1000 );
> "One second elapsed."
> "One second elapsed."
> "One second elapsed."
…
アロー関数式
アロー関数式(「アロー関数」またはまれに「ラムダ」と呼ばれる) 関数など)が ES6 で導入され、 独自の動作を持つ匿名関数式です。
式がある場所にアロー関数を作成できます。たとえば、
値として変数に代入されます。最も一般的な形式では、
ゼロ個以上の値を含む一組のかっこで構成され、
1 つの等号と大なり記号で構成される矢印
(=>
)、関数本体を含む一致した中かっこのペア:
const myFunction = () => {};
特定の条件下では、構文をさらにコンパクトにすることができます。もし 使用する場合は、最初のかっこを省略できます。
const myFunction = myParameter => {};
関数本体で単一の式の値を返す場合は、
関数本体を中かっこで囲むことも、
return
キーワードは必須です。
const myFunction = () => 2 + 2
myFunction()
> 4
アロー関数には独自のコンテキストがないため、
arguments
または
this
の値。代わりに、これらの値は、これらのコンテキストを提供する最も近い包含関数である、矢印関数の字句的包含環境から両方とも継承されます。
function myParentFunction() {
this.myProperty = true;
let myFunction = () => {
console.log( this );
}
myFunction();
};
let myInstance = new myParentFunction();
> Object { myProperty: true }
アロー関数を呼び出す
Arrow 関数は、引数を
他の種類の関数も使用できます。
矢印関数本体の arguments
オブジェクトは、その矢印関数の最も近い字句的包含環境から値を継承します。
function myFunction() {
let myArrowFunction = () => {
console.log( arguments[ 0 ] );
}
myArrowFunction( true );
};
myFunction( false );
> false
この例では、引数 false
で呼び出された外側の関数が、
内側アロー関数で引数 true
を指定します。arguments
オブジェクトは
アロー関数の内部は、外側の関数のバインディングに解決され、
内部関数は、外部関数の false
をログに記録します。
親コンテキストから継承する arguments
オブジェクトがない場合は、矢印
関数の arguments
オブジェクトが定義されていないため、アクセスしようとすると
error:
let myArrowFunction = () => {
console.log(arguments);
};
myArrowFunction( true );
> Uncaught ReferenceError: arguments is not defined
直ちに呼び出される関数式(IIFE)
直ちに呼び出される関数式(IIFE)。 「自己実行匿名関数」を使用すると呼び出される関数式です。 自動的に適用されます。IIFE は、関数をグループ化演算子で囲むことで作成された関数式を使用します。次に、2 番目の一致したかっこで、関数を呼び出します。 関数定義自体の後、または関数のグループ化の直後に配置します。 演算子を使用します。標準関数を使用しても実質的な違いはありません 理解することが重要です。
(function() {
console.log( "IIFE.")
}
)();
> "IIFE."
(function() {
console.log( "IIFE.")
}
());
> "IIFE."
最初の例では、グループ化された関数式を呼び出します。2 つ目の例は グループ化演算子内で関数宣言を呼び出し、最終的に グループ化された式として評価されますどちらの場合も結果は同じです。 あります。
ただし、IIFE がアロー関数の場合は違いがあります。この場合、関数の呼び出しに使用するかっこはグループ化演算子の外側にする必要があります。矢印関数自体は式ではありませんが、式が想定されるコンテキストで作成する必要があるためです。呼び出しを試行すると、 グループ化演算子のスコープ内にあるアロー関数では、 関数のコンテキストでまだ作成されていないアロー関数を呼び出す expression:
( () => {
console.log( "IIFE." );
}() );
> Uncaught SyntaxError: missing ) in parenthetical
グループ化演算子は式を想定しているため、 グループ化されて、その後のかっこでグループ化された expression:
( () => {
console.log( "IIFE." );
} )();
> "IIFE."
スコープを管理するために頻繁に使用される従来のアプリケーション、特に グローバル スコープの汚染を避ける 関数スコープ変数を使用 関数宣言があります。 ブロック スコープを導入する前 ES6 では、スクリプト全体を IIFE でラップすることが一般的でした。これにより、 世界で起きた偶発的な汚染
理解度をチェックする
名前付き関数式を関数外で名前で呼び出すことはできますか?