我知道以下是 $( document ).ready()
的简写:
$(function() {
console.log( "ready!" );
});
我也明白什么是匿名 JS 函数,但是 jQuery 在使用匿名函数调用时有什么特别之处吗?即:
(function() {
console.log( "ready!" );
})($);
后者只是一个使用 jQuery 的普通匿名 JS 函数吗(即,它不会被视为 $(document).ready()
的简写,因此会立即执行)?
我觉得这一定是以前问过的,但如果有的话我找不到。
正如您所提到的,前者确实是 $(document).ready()
的简写。
至于后者,这只是一个Immediately Invoked Function Expression。
(function ($) {
console.log('ready');
})(jQuery);
这个函数只是一个匿名函数,它接收一个名为$
的参数。该函数被立即调用,并将一些值(在本例中为 jQuery
)作为参数。
IIFE 还可用于隔离作用域 并避免在包含多个 JavaScript 文件的 Web 应用程序中使用全局变量。在这种情况下,可以使用无参数 IIFE:
(function () {
// x is only accessible within this IIFE
var x;
// do something...
})();
有关立即调用的函数表达式的更多信息,请参阅此问题:What is the purpose of a self executing function in javascript?