5

重複の可能性:
これはどういう意味ですか?(関数(x、y)){…}){a、b); JavaScriptで

私はjavascriptの初心者です。私はJSユーザー定義関数を書くことを知っています。しかし、最近、私は認識できない何かに出くわしました。誰かがこれが何であるか私に説明できますか?

(function( window, undefined ) {

    var jQuery = (function() {
    });
           window.jQuery = window.$ = jQuery;
})(window);

これはどういう意味ですか?私がグーグルのJavaScript関数を使っているとき、私は

function foo(){ 
    alert("This is an alert"); 
}

私はこれらのタイプの関数を使用することを知っています

4

3 に答える 3

4

簡単な答え:これらは、字句スコープとクロージャを提供する即時呼び出し関数です。

より良い説明については、私が少し前に投稿したこの回答を見てください。

アップデート:

字句スコープとは、関数内で宣言された変数が関数本体の外部に表示されないことを意味します。

クロージャは、関数本体が定義されたスコープ内にある場合、その関数の後続の呼び出しで使用できるため、スコープ外になる変数への参照を保持する方法です。参照:ウィキペディアの閉鎖

更新2:

これらすべてを本当に理解したい場合は、1986年のコンピュータプログラムの構造と解釈に関するGerrySussmanとHalAbelsonによるMITの講義(YouTubeで入手可能)をご覧になることを強くお勧めします。私の意見では、JavaScriptに関するものではありませんが、これらの講義を見るよりもJavaScriptを真に理解するためのより良い方法はありません。ブレンダン・アイクがJavaScriptを設計したときに、どの言語が本当にインスピレーションを得たのかがすぐにわかります。ヒント:Javaではありませんでした。

于 2012-09-23T03:04:03.693 に答える
3

これは、モジュールパターンとも呼ばれる、それ自体を実行する関数です。

関数の内部で定義された属性は外部からアクセスできませんが、返す属性はアクセスできるためpublic、名前空間を導入するためによく使用されます。private

たとえば、オブジェクトを返す場合、関数を次のようなオブジェクトとして扱うことができます。

var a = (function() {
  var a= 0; // this is only accessible inside this function
  var b = {
    a: 1 // this will be returned and therefore be accessible on the outside
  };
  return b;
})();

console.log(a.a); // outputs 1
于 2012-09-23T03:06:45.410 に答える
1

以下は関数文です。単独で存在できます。

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"); 
}

これは、それらの使用法に関する興味深い記事です。

于 2012-09-23T03:44:44.400 に答える