所以,我们都应该知道jQuery文档就绪处理程序:
$(function () {
// stuff here
});
基本上,如果$
函数的第一个参数是函数,那么我们在文档启动时运行它,对吗?
那么为什么这不起作用?
$(foo());
答案 0 :(得分:9)
当您输入$(foo());
时,实际上正在调用 foo
并将结果传递给$
。如果您想使用foo
作为回调,则需要输入$(foo)
。
答案 1 :(得分:7)
因为foo()的结果不是函数。
使用:$(foo);
答案 2 :(得分:4)
你走了。
function foo() {
return function() {
console.log("Hello World");
}
}
$(foo());
现在它有效。 (看看我在那里做了什么?)
答案 3 :(得分:1)
foo被命名为函数而且它不是匿名的。所以它需要像 $(foo);
一样使用检查出来
var functionName = function() {} vs function functionName() {}
答案 4 :(得分:1)
首先,您需要知道$
的第一个参数不是(总是)一个函数。在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);