0

私は常にドキュメントの準備ができているので、それをたくさん入力することから知るのではなく、何が起こっているのかを本当に知るためにいくつかのチュートリアルビデオを見ています。

私はいつもそれを習慣から匿名関数に入れていましたが、それが匿名関数にないかどうかを確認します(alert();たとえば)、DOMがロードされたときではなく、そのjavascriptがすぐに実行されます負荷。これが(ページ全体がロードされたときに)想定された方法で発生し、イベントリッステッターがその「準備完了」をトリガーするためには、匿名関数内にある必要があります。

どうしてこれなの?

さらに、function(i){}(i)のようなものをよく目にしますが、これはどういう意味ですか?

4

3 に答える 3

5

$(document).ready(...)この回答では$(...)、関数が渡された場合に、の省略形を使用します。

関数は匿名である必要はありません。あなたはこれを例えば書くことができます:

function doStuff() {
}

$(doStuff);

私はあなたがこれを試してみるとあなたが意味することだと思います:

$(alert('Yo!'));

それは確かにすぐに警告します。これは、関数が期待されてalert()おり、関数呼び出しであるためです。一方、これは(奇妙ではありますが)機能します:

$(alert);

2番目の質問でfunction(i){}(i)は、1つのパラメーターを使用して関数オブジェクトを宣言し、指定された引数を使用してすぐに実行します。これは、オブジェクトをグローバルにする必要がなく、特定の名前を付ける必要もなく、オブジェクトを使用するための便利な方法です。たとえば、これは次のとおりです。

(function($) {
    // Do stuff with $
})(jQuery);

jQueryとしてエイリアスを作成できます$

于 2012-05-19T22:43:47.067 に答える
3

それがJavaScriptの仕組みです。

$(document).ready(alert('x'));実行alert('x')し、その戻り値をに渡します$(document).ready()。これは明らかに意味がありません。DOMの準備ができたときにコードを実行する必要があります。したがって、そのコードを含む関数$(document).ready()を-に渡すと、DOMの準備が整うとすぐに、jQueryはその関数に渡されたすべての関数を実行します。

(function(i){})(i);新しいスコープで新しい変数を作成する方法です。これは、ループ内にコールバックを作成していて、ループ変数の現在の値が必要な場合に必要です。

質問の最初の部分でjQueryコードをラップすることがある無名関数について話している場合、つまり、(function($){ /* code here *= })(jQuery);これは$、グローバルスコープでjQueryを指していない場合でも使用できるようにするために使用されます。これは、前の段落で述べたものと似ていますが、別の目的で使用されています。

于 2012-05-19T22:42:35.593 に答える
1

あなたがするとき

$(alert())

と同等

var alertresult = alert()
$(alertresult);

この場合、アラートがすぐに実行されることは明らかです。関数自体を渡したい場合は、それを呼び出さないようにする必要があります。

$(alert)

物事に関しては、function(i){ dosomething }(somevalue)それは基本的にのshiortバージョンです

(function(){
    var i = somevalue;
    dosomething;
}());

つまり、dosomethingビット内で変数「i」を使用できます。すぐに呼び出される関数でコードをラップする理由は、i変数を関数でのみアクセス可能なローカル変数にするため、他のグローバル変数と衝突したり、他の関数で上書きしたりできないようにするためです。

于 2012-05-19T22:54:39.350 に答える