したがって、jQuery ドキュメント対応ハンドラーについて知っておく必要があります。
$(function () {
// stuff here
});
つまり、基本的に、関数の最初のパラメーターが$
関数の場合、ドキュメントの起動時にそれを実行しますよね?
では、なぜこれが機能しないのでしょうか。
$(foo());
したがって、jQuery ドキュメント対応ハンドラーについて知っておく必要があります。
$(function () {
// stuff here
});
つまり、基本的に、関数の最初のパラメーターが$
関数の場合、ドキュメントの起動時にそれを実行しますよね?
では、なぜこれが機能しないのでしょうか。
$(foo());
入力$(foo());
すると、実際に呼び出し foo
て結果を に渡し$
ます。コールバックとして使用する場合はfoo
、 と入力する必要があります$(foo)
。
foo() の結果は関数ではないためです。
使用: $(foo);
どうぞ。
function foo() {
return function() {
console.log("Hello World");
}
}
$(foo());
今では動作します。(私がそこで何をしたかわかりますか?)
まず、 の最初のパラメーター$
は (常に) 関数ではないことを知っておく必要があります。jQuery のソース コードを調べてみると、次の関数が呼び出されていることがわかります。
init: function( selector, context, rootjQuery ) {
以下を(順番に)処理します。
// Handle $(""), $(null), or $(undefined)
// Handle $(DOMElement)
// The body element only exists once, optimize finding it
// Handle HTML strings (tags, id's etc.)
// HANDLE: $(function)
// Shortcut for document ready
あなたの質問は、次のコードを持つ最後の部分に関するものです。
// HANDLE: $(function)
// Shortcut for document ready
} else if ( jQuery.isFunction( selector ) ) {
return rootjQuery.ready( selector );
}
ここで、セレクターが関数かどうかを jQuery がチェックすることがわかります。あなたの場合、そうではありません。実際に関数を渡すのではなく、関数を呼び出しています。foo の結果が関数の場合、それは機能します。
これを次のように変更することもできます。
var foo = function() {
// do your stuff
};
$(foo);
foo は関数という名前であり、匿名ではありません。したがって、 $(foo);のように使用する必要があります。
これをチェックしてください