2011-09-30 15 views

回答

43

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

+0

好吧,所以主要区别在于第二个不会等待文档完成加载,并立即执行? – xil3

+3

@ xil3 - 正确。如果函数需要修改DOM,第一个是合适的。第二个是有用的,如果你只需要JS的影响。很少这两者是可以互换的,但通常前者是可取的,因为大多数jQuery代码被用来操纵DOM元素。 –

4

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

+0

jquery ready函数不作为闭包吗? – xil3

+1

这实际上并不是封闭。只是一个自我调用的匿名函数。他们都不是封闭的。请参阅:http://stackoverflow.com/questions/111102/how-do-javascript-closures-work – gilly3

20

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

$(document).ready(function() { 
    /* Handler for .ready() called. */ 
}); 

虽然(function() {})();是即刻调用的功能表达,或IIFE。这意味着它的表达式(不是语句),它在创建后立即被调用。

+1

*自我执行匿名函数 –

+8

我宁愿看到他们称为“立即调用”而不是“自动执行”或“自调用”。例如,'(function(){arguments.callee()})()'是一个“自动执行/调用匿名函数”,而'(function(){})()'只是一个被调用的匿名函数立即。请参阅:http://benalman.com/news/2010/11/immediately-invoked-function-expression/#iife – nwellcome

3

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

jQuery的工作原理是这样的。

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

所以你只是调用jQuery函数并传入一个函数,这将在文档准备就绪时调用。

“自动执行匿名功能”与此相同。

function a(){ 
    // do stuff 
} 
a(); 

唯一的区别是你不污染全局命名空间。

0
$(function() { 
    // It will invoked after document is ready 
}); 

此功能执行一次文件准备的意思,整个HTML应该得到执行之前加载,但在第二种情况下,该功能调用它在创建后立即。

(function() { 
    // It will invoked instantly after it is created 
})();