1

所以,我们都应该知道 jQuery 文档就绪处理程序:

$(function () {
  // stuff here
});

所以基本上,如果函数的第一个参数$是一个函数,那么我们在文档启动时运行它,对吗?

那为什么这行不通呢?

$(foo());
4

5 回答 5

9

当您键入时,$(foo());您实际上是在调用 foo并将结果传递给$. 如果要foo用作回调,则需要键入$(foo).

于 2012-10-03T08:56:02.933 回答
7

因为 foo() 的结果不是函数。

使用:$(foo);

于 2012-10-03T08:55:51.320 回答
4

干得好。

function foo() {
  return function() {
    console.log("Hello World");
  } 
}

$(foo());

现在它起作用了。(看看我在那里做了什么?)

于 2012-10-03T09:00:42.763 回答
1

foo 被命名为函数,它不是匿名的。所以它需要像$(foo);一样使用。

看一下这个

var functionName = function() {} vs function functionName() {}

于 2012-10-03T09:03:34.857 回答
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);
于 2012-10-03T09:05:22.610 回答