JSの関数オブジェクトは魅力的なものですが、柔軟性が高すぎるため混乱していることがよくあります。
最初にコードスニペットを見せてください。
var scope = "global"; function constructfunction(){var scope = "local"; return new function( "return scope");} constructfunction()()(); function constructionfunction2(){var scope = "local"; return function(){return scope;}} constructfunction2()()();これら2つを見たときの最初の気持ちは何ですか?すべて「ローカル」を返しますか? ?この場合、以下の説明を詳しく調べる必要があります。 ConstructFunction2()は閉鎖を簡単に理解できるはずです。ここでは詳細には記載されていません。次に、ConstructionFunction()の状況に焦点を当てます。
function()コンストラクターはここで使用されます。関数()コンストラクターはあまり一般的に使用されていませんが、それを理解する必要があります。
関数定義ステートメントであろうと、関数の直接的な定量式であろうと、関数定義は関数()キーワードを使用する必要があります。単一の関数は、次のようなfunction()コンストラクターによって定義することもできます。
var f = new function( "x"、 "y"、 "return x*y");
この行の実際の効果は、次のコード行に相当します。
var f = function(x、y){x*y};関数()コンストラクターは、任意の数の文字列引数を渡すことができ、最後の引数で表されるテキストは関数本文です。 JavaScriptステートメントを含めることができ、各ステートメントはセミコロンで分割されます。コンストラクターに渡された他のすべての引数文字列は、関数の名前を指定する文字列です。定義された関数にパラメーターが含まれていない場合は、文字列関数本文をコンストラクターに渡すだけです。
関数()コンストラクターについて特に注意を払うためのいくつかのポイントがあります。
1。function()constructorを使用すると、JavaScriptは実行時に関数を動的に作成およびコンパイルできます。
2。関数()コンストラクターが呼び出されるたびに、関数本文が解析され、新しい関数オブジェクトが作成されます。このコンストラクターがループまたは複数の呼び出しで実行されると、実行効率が影響を受けます。対照的に、ループのネストされた関数と関数定義式は、実行されるたびに再コンパイルされません。
2。最後のポイントは、関数()コンストラクターに関する非常に重要なポイントでもあります。つまり、作成する機能は語彙スコープを使用しません。それどころか、関数ボディコードの編集は常にトップレベルの関数で実行されます。これを読んだ後、上記の関数ConstructionFunction()(); 「グローバル」を返すのは簡単に理解できるはずですか?
上記は、エディターによって導入されたJS function()コンストラクターです。私はそれが誰にでも役立つことを願っています。ご質問がある場合は、メッセージを残してください。編集者は、すべての人に時間内に返信します。 wulin.comのウェブサイトへのご支援ありがとうございます!