if($(function(){});是合法代码,为什么不是$(foo())?

时间:2012-10-03 08:54:05

标签: jquery

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

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

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

那么为什么这不起作用?

$(foo());

5 个答案:

答案 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);