$(function(){...}之后的额外一组parens)

时间:2011-12-05 00:41:04

标签: javascript

我有一段代码看起来像这样:

$(function() {
  // some code here to do stuff
})();

最后的extra()有什么想法?无论有没有它们,脚本都能正常工作。

我确信之前已经讨论过这个问题,但我不知道如何进行代码搜索。

4 个答案:

答案 0 :(得分:5)

我会说这是一个错字。

(JQuery DOM Ready):

$(function() {
  // some code here to do stuff
});

(自行调用匿名函数):

(function() {
  // some code here to do stuff
})();

答案 1 :(得分:2)

实际上这似乎会产生运行时错误,因为jQuery对象(由$(...)调用返回)不是函数本身。因此,尝试调用它是一个错误。使用Javascript控制台进行测试将确认这一点。

看起来这段代码“结合”了使用jQuery设置文档就绪回调的想法,并在函数中包装初始化代码以获得单独的作用域,但最终结果只是一个错误。

这个

$(function() { ... }); // document-ready callback with jQuery

或者

(function() { ... })(); // initialization code in its own scope

会有意义。

答案 2 :(得分:2)

前面有$,这并不意味着什么。它可能应该是$(function() {});,这是jQuery在dom准备就绪时调用函数的方式。它与$(document).ready(function(){});相同。

使用JavaScript函数,额外的括号集会立即调用该函数。

(function() {
    alert( "hi" );
})();

几乎相同
function fn() {
    alert( "hi" );
}
fn();

答案 3 :(得分:0)

不确定Jon发布的$(function(){})()(它会导致jQuery出错 - 我可以看到$(function(){}());)但是通常当你看到这个时,trailing()实际上会调用该函数。

var a = 2;
(function() {
    a = 1;
})
alert(a);

因为函数永远不会被调用,所以会导致2 - 它只是声明了。

var a = 2;
(function() {
    a = 1;
})();
alert(a);

结果为1,因为现在调用声明的函数。这通常是为了创建一个匿名函数而不必显式声明它(例如function doSomething();),这会使用无聊的实用函数来填充你的命名空间。