以下は関数文です。単独で存在できます。
function foo(){
alert("This is an alert");
}
次のように「呼び出す」(実行する)ことができます。
foo();
以下は関数式です (無名関数など ** 下部の編集を参照 **)。他の式と同様に、右辺値のようなもので、変数に割り当てることができます
var f = function (){
alert("This is an alert");
};
次に、次のように「呼び出す」(実行する) ことができます。
f();
または、次のように演算子を使用できます。
(function (){
alert("This is an alert");
})();
そして、この変数はパラメータとして他の関数に渡すことができることに注意してください! (つまり、関数をパラメーターとして渡すことができます)。
さて、これを分析しましょう:
(function( window, undefined ) {
//blah blah blah -1
//blah blah blah -2
})(window);
これは、次の 2 つに分けることができます。
var f = function( window, undefined ) {
//blah blah blah
};
f(window);
関数 (f に割り当てられる) は、2 つのパラメーターと を受け取りwindow
ますundefined
。1 番目のパラメーターをwindow
(ブラウザーによって呼び出し元に提供されます。これはグローバル オブジェクトです) として渡します。2 番目のパラメーターを渡していないことに注意してください。しかし、関数の 2 番目のパラメーターが必要であるが渡されないため、Javascript インタープリターはundefined
(インタープリターで定義されているように) 値をそれに割り当てます。そのため、変数 (パラメーター)undefined
には undefined が含まれるようになりました。
これら 2 つの値をパラメーターとして受け入れる主な目的は、関数をグローバル変数から独立させることです。(JS スクリプトまたはブラウザ プラグインが undefined を別のものに変更するとどうなるか想像してみてください!!)
参照:
https://developer.mozilla.org/en-US/docs/JavaScript/Guide/Functions
https://developer.mozilla.org/en-US/docs/JavaScript/Guide/Expressions_and_Operators
編集:
@FelixKling がコメントしたように、関数式は匿名である必要はなく、名前を持つことができます。
var f = function foo(){
alert("This is an alert");
}
これは、それらの使用法に関する興味深い記事です。