2

関数定義について説明しているECMA262v5スクリプトの部分を読んでいます。関数宣言と関数式の両方について、次のことが言及されています。

13.2で指定された新しいFunctionオブジェクトを作成した結果を返します。

セクション13.2で説明されていることの最初のステップは、「新しいネイティブECMAScriptオブジェクトを作成する...」そして「Fの[[Class]]内部プロパティを「Function」に設定する」ことです。

「新しいFuncitonオブジェクトを作成する」という言葉のせいで、舞台裏では、new Function(....)を呼び出して関数の宣言/式を作成したのではないかと思いました。

4

2 に答える 2

1

ECMAスクリプト仕様のセクション15.3.2.1は、新しいFunction(...)式について説明しており、新しいFunction(...)式自体は、セクション13.2で指定されているものと同じロジックを参照しています。

新しいFunction(...)式に関する箇条書き11は、...を指定します。

13.2で指定されたように作成された新しいFunctionオブジェクトを返し、PをFormalParameterListoptとして、bodyをFunctionBodyとして渡します。ScopeパラメーターとしてGlobalEnvironmentを渡し、Strictフラグとしてstrictを渡します。

セクション13.2は、関数式の作成、関数宣言、または関数コンストラクターの呼び出しに関係なく、関数作成ロジックの単一のソースです。

だから、質問に答えるために、いいえ。関数宣言/式を作成しても、new Function(...)は呼び出されません。

于 2013-02-26T20:26:29.783 に答える
0

「新しい Funciton オブジェクトを作成する」という文言のために、関数宣言/式は、new Function(....) を呼び出して作成された裏で作成されているのではないかと考えていました。

いいえ、まさにそのとおりで、新しいオブジェクトを作成し、それを関数にします。他の舞台裏でnew Function何が起こると思いますか? 代わりに、new Function13.2 でもその関数のインスタンス化を呼び出します。

于 2013-02-26T20:44:01.440 に答える