的是这两者之间的区别:美元符号之前自我声明JavaScript中的匿名函数?
$(function() {
// do stuff
});
和
(function() {
// do stuff
})();
的是这两者之间的区别:美元符号之前自我声明JavaScript中的匿名函数?
$(function() {
// do stuff
});
和
(function() {
// do stuff
})();
第一个使用jQuery将函数绑定到document.ready
事件。第二个声明并立即执行一个函数。
$(function() {});
是一个jQuery快捷方式
$(document).ready(function() {
/* Handler for .ready() called. */
});
虽然(function() {})();
是即刻调用的功能表达,或IIFE。这意味着它的表达式(不是语句),它在创建后立即被调用。
*自我执行匿名函数 –
我宁愿看到他们称为“立即调用”而不是“自动执行”或“自调用”。例如,'(function(){arguments.callee()})()'是一个“自动执行/调用匿名函数”,而'(function(){})()'只是一个被调用的匿名函数立即。请参阅:http://benalman.com/news/2010/11/immediately-invoked-function-expression/#iife – nwellcome
它们都是匿名函数,但立即调用(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();
唯一的区别是你不污染全局命名空间。
$(function() {
// It will invoked after document is ready
});
此功能执行一次文件准备的意思,整个HTML应该得到执行之前加载,但在第二种情况下,该功能调用它在创建后立即。
(function() {
// It will invoked instantly after it is created
})();
好吧,所以主要区别在于第二个不会等待文档完成加载,并立即执行? – xil3
@ xil3 - 正确。如果函数需要修改DOM,第一个是合适的。第二个是有用的,如果你只需要JS的影响。很少这两者是可以互换的,但通常前者是可取的,因为大多数jQuery代码被用来操纵DOM元素。 –