2

誰かがこれがjavascriptで何をするのか私に説明できますか?

 (function (x,y){}(x,y));

またはこれ

  // global import
  (function ($, YAHOO) {
         // now have access to globals jQuery (as $) and YAHOO in this code
  }(jQuery, YAHOO));

私はjavaやc++のような他の言語で似たようなものを見たことがありません

4

4 に答える 4

3

function(x, y) { }匿名の機能です。

(x, y)xその関数を呼び出し、パラメータとして渡しyます。

于 2012-07-01T21:39:08.197 に答える
3

2番目のコードブロックの目的は、(グローバルに定義せずに)jQueryとして使用可能にし、ローカルスコープにインポートして、変数のルックアップを少し高速化することです。$$YAHOO

さらに、新しいスコープが作成されるため、varinsideで定義された変数はグローバルになりません。

最初のコードブロックは、新しい変数を作成するためにこのように使用されることがよくあります。たとえば、ループ内にいてi、コールバックの現在の値で変数を作成する必要がある場合です。

for(var i = 0; i < 10; i++) {
    (function(i) {
        setTimeout(function() {
            alert("number " + i);
        }, 1000 * i);
    })(i);
}

その新しいスコープがなければ、毎回同じ iであるため、「番号10」を10回アラートします。

于 2012-07-01T21:40:58.123 に答える
1

x最初の関数は無名関数を呼び出します。この関数は2つの引数を取り、引数としてとを使用して何もしませんy

2番目は同じことをします。最初の引数名として$を使用し、引数値としてjQueryを渡します。したがって、この関数内でオブジェクト$を参照するために使用することができjQueryます。これは、関数内で変数を別の名前にエイリアスする方法です。

于 2012-07-01T21:42:00.953 に答える
0

C#には、ラムダ式と呼ばれる同様の概念があります。

public static Func<int> Foo()
{
    int a = 1,
        b = 2;

    return () => a + b;
}

これは、匿名で宣言される一般的なファーストクラス関数です(ファーストクラス関数とは、関数自体が返されることを意味し、その結果ではありません)。

この場合、クロージャと呼ばれるものも示します。返されたメソッドは「ローカル」変数aとbを囲み、Fooがスコープ外になったときにそれらを保持できるようにします。多くの言語では、匿名メソッドはクロージャーを実装します。

匿名のメソッドも非常に優れています。このベンチマークメソッドのように、動作の挿入を実行できます。

public static TimeSpan BenchmarkMe(Action timeThis)
{
    Stopwatch sw = Stopwatch.StartNew()
    timeThis();
    sw.Stop;

    return sw.Elapsed;
}

TimeSpanを返す無名関数をこのメソッドに渡すことができます。このメソッドは、TimeSpanに対してシングルパスのベンチマークを実行します。気の利いた、え?

于 2012-07-10T18:12:11.727 に答える