2017-11-23 3 views
1

名前をつけて関数を作成し、括弧で囲むか、別の関数に引数/コールバックとして渡します。後でという名前でその関数を参照しようとすると、エラーがスローされます。その名前はです。括弧で囲まれた関数を名前で参照することはできません。

例:

(function name1(){}); 
console.log(name1); // throws error: name1 is not defined 

例:

plugin.module(function name2(){}); 
name2(); // throws error: name2 is not defined 

答えて

1

functionキーワードは2つの類似したが、明確に異なるものが行われます。

  1. をそれは関数宣言文を紹介します。
  2. 関数式を紹介しています。それらのものの

両方の機能を作成し、前者(関数宣言)もローカルスコープ内に(その場合に必要)関数名に結合します。ただし、関数の式は、ではありません。は、ローカルスコープに関数名をバインドします。名前は、作成された関数の範囲内でのみバインドされます(つまり、内には、関数)。

functionがステートメントの最初のトークンである場合、それは関数宣言です。それ以外の場合は、関数式です。したがって、functionステートメントのまわりのかっこを使用すると、それはもはやステートメントではなくなります。それは表現です。

1

解決するいくつかの方法:

function name1(){ //declaration instead of expression 
//... 
} 

name1(); 

またはビット醜い:

let name1; 
(name1 = function(){/*...*/})(); 
name1(); 
関連する問題