所以,我们都应该知道 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());
现在它起作用了。(看看我在那里做了什么?)
foo 被命名为函数,它不是匿名的。所以它需要像$(foo);一样使用。
看一下这个
var functionName = function() {} vs function functionName() {}
首先,您需要知道 的第一个参数$
不是(总是)一个函数。深入研究 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);