1.すぐに実行される匿名関数と呼ばれます(すぐに呼び出す関数とも呼ばれます)
2.匿名関数が囲まれ、その後、後部にブラケットが追加されると、匿名関数をすぐに実行できます!魔法のようなものはありますか?
3。関数を使用するには、最初にその存在を宣言する必要があります。私たちが使用する最も一般的な方法は、関数ステートメントを使用して関数を定義することです
4。関数オブジェクト
関数オブジェクトはJavaScriptの固有のオブジェクトであり、すべての関数は実際には関数オブジェクトです。
まず、関数オブジェクトがコンストラクターを直接使用して新しい関数を作成できるかどうかを見てみましょう。答えはイエスです。
var abc = new function( "x"、 "y"、 "return x*y;");アラート(ABC(2,3)); // "6"
5.匿名関数には名前がないので、それはそれらをどのように呼び出すべきかという問題に拡張されます(O_O)?
匿名関数の呼び出し
var abc = function(x、y){return x+y; } alert(ABC(2,3)); // "5"上記の操作は、実際には関数を異なる方法で定義することと同等です。この使用法は、より頻繁に遭遇するものです。
たとえば、DOM要素イベントハンドラー関数を設定するとき、通常は名前を付けず、代わりに対応するイベントに匿名関数への参照を与えます。
匿名関数を呼び出します②
()を使用して匿名関数を囲み、次にブラケットのペア(パラメーターリストを含む)を追加します。
alert((new function( "x"、 "y"、 "return x*y;")(2,3)); // "6"
6.ブラケットの役割は何ですか?
ブラケットは私たちの表現をチャンクに分けることができ、それぞれのピース、つまりブレースの各ペアには返品値があります。この返品値は、実際には括弧内の式の返品値です。
したがって、匿名関数を一対のブラケットで囲むとき、括弧は匿名関数の関数オブジェクトを返します。
したがって、ブラケットペアに匿名関数を追加することは名前付き関数のようなものであり、その参照位置を取得します。したがって、この参照変数の後にパラメーターリストを追加すると、通常の関数の呼び出し形式が実装されます。
7。関数宣言、関数式、匿名関数
関数宣言:function fnname(){…};関数キーワードを使用して関数を宣言し、関数宣言と呼ばれる関数名を指定します。
関数式var fnname = function(){…};関数キーワードを使用して関数を宣言しますが、関数には名前がありません。最後に、匿名関数には、関数式の構文の最も一般的な形式である関数式と呼ばれる変数が割り当てられます。
匿名関数:function(){};関数キーワードを使用して関数を宣言しますが、関数は名前が付けられていないため、匿名関数と呼ばれます。匿名関数は関数式に属します。匿名関数には多くの関数があります。変数を割り当てる場合、関数を作成し、イベントを割り当てる場合、イベントハンドラーになるか、閉鎖などを作成します。
関数宣言と関数表現の違いは、
1. JavaScriptエンジンがJavaScriptコードを解析する場合、現在の実行環境(範囲)で「関数宣言の巻き上げ」(関数宣言の巻き上げ)関数宣言になります。関数式は、関数式を上から下線に解析する前に、JavaScirtPエンジンがそのラインに実行されるまで待つ必要があります。
2。関数式は、その後の括弧ですぐに呼び出すことができます。関数宣言は実行できず、fnname()の形式でのみ呼び出すことができます。
栗
fnname(); function fnname(){...} //正常、関数宣言を「促進」するため、関数呼び出しはfnname(); var fnname = function(){...} //エラーが報告される可能性があります。栗
var fnname = function(){alert( 'hello world');}(); // function Expressionの後にParcelsが追加されます。ここでJavaScriptエンジンが解析する場合、ここでJavaScriptエンジンがfnname(){alert( 'hello world');}()(); // javaScriptエンジンのみが関数宣言を解析する場合は、fnname(){alert( 'hello world');}()を解析するときにすぐに呼び出すことができます。 }(); //構文エラー、匿名関数は関数式に属しますが、割り当て操作は実行されませんが、// JavaScriptエンジンは最初の関数キーワードを関数宣言として扱い、エラーを報告します。関数本文の後にブラケットを追加する場合は、すぐに呼び出すことができます。この関数は、関数宣言ではなく関数式でなければなりません。
栗
(function(a){console.log(a); // firebug output 123、use()operator})(123);(function(a){console.log(a); // firebug output 1234、()operator}()()(1234));!le機能(a){console.log(a); // firebug出力12345、使用!オペレーター}(12345); +function(a){console.log(a); // firebug output 123456、use + operator}(123456); -Function(a){console.log(a); // firebug output 1234567、use -operator}(1234567); var fn = function(a){console.log(a); // firebug output 12345678、use = operator}(12345678)出力の結果を確認し、関数の前に追加できます! 、 +、 - そして、コンマでさえ、関数が定義された直後に実行するために使用できます。 +、 - 、=関数宣言を関数式に変換し、関数式と関数宣言を識別するJavaScriptエンジンの間の曖昧さを排除し、これが関数宣言ではなく関数式であることをjavaScriptエンジンに伝え、その後の括弧を追加して、関数のコードをすぐに実行できます。
ブラケットを追加することは、それを行うための最も安全な方法です。 、 +、および - などのオペレーターは、関数の戻り値で操作を実行します。これは、不必要なトラブルを引き起こすことがあります。
しかし、このように書くことの使用は何ですか?
JavaScriptにはプライベートスコープの概念はありません。複数の人々が開発したプロジェクトのグローバルまたはローカルスコープのいくつかの変数を宣言すると、同じ名前の他の人が上書きされる可能性があります。 JavaScript関数のスコープチェーンの特性によれば、この手法を使用してプライベートスコープを模倣し、匿名関数を「コンテナ」として使用できます。 「コンテナ」は外部変数にアクセスできますが、外部環境は「コンテナ」内の変数にアクセスできないため、内部(function(){…})()は、一般に「匿名ラッパー」または「名前空間」として知られている外部変数と矛盾しません。
jQueryはこの方法を使用します。 jQueryコードが(function(window、undefined){…jquery code…}(window)に包まれている場合、グローバル範囲でjqueryコードを呼び出すときにjqueryの内部変数を保護できます。