g.d*_*d.c 48

第一个使用jQuery将函数绑定到document.ready事件.第二个声明并立即执行一个函数.

  • @ xil3 - 正确.如果函数需要修改DOM,则第一个是合适的.如果你只需要JS的效果,第二个是有用的.很少这两者是可互换的,但通常前者是优选的,因为大多数jQuery代码用于操纵DOM元素. (3认同)

voi*_*tan 24

$(function() {}); 是一个jQuery快捷方式

 $(document).ready(function() { 
     /* Handler for .ready() called. */ 
 });
Run Code Online (Sandbox Code Playgroud)

虽然(function() {})();是一个即时调用的函数表达式,或IIFE.这意味着它是一个表达式(不是语句),它在创建后立即被调用.

  • 我宁愿看到它们被称为"立即调用"而不是"自我执行"或"自我调用".例如,`(function(){arguments.callee()})()`将是"自执行/调用匿名函数",而`(function(){})()`只是一个被调用的匿名函数立即.请参阅:http://benalman.com/news/2010/11/immediately-invoked-function-expression/#iife (8认同)

nat*_*lez 5

一个是 jquery$(document).ready函数,另一个只是一个调用自身的匿名函数。


tim*_*ood 5

它们都是匿名函数,但(function(){})()会立即调用,并$(function(){})在文档准备好时调用。

jQuery 的工作方式是这样的。

window.jQuery = window.$ = function(arg) {
    if (typeof arg == 'function') {
        // call arg() when document is ready
    } else {
       // do other magics
    }
}
Run Code Online (Sandbox Code Playgroud)

因此,您只需调用 jQuery 函数并传入一个函数,该函数将在文档就绪时调用。

“自执行匿名函数”与执行此操作相同。

function a(){
    // do stuff
}
a();
Run Code Online (Sandbox Code Playgroud)

唯一的区别是您没有污染全局命名空间。