为什么要这样写代码Jquery?
(function ($) {
$(function () {
.......
});
})(jQuery);
这称为闭包以避免与正在使用的其他库发生冲突$
。这样,您可以确保$
在该函数中使用并jQuery
作为参数传递。
(function ($) {
$(function () {
.......
});
})(jQuery); //<----passing jquery to avoid any conflict with other libraries.
将 jQuery 传递给将其映射到美元符号的 IIFE(立即调用函数表达式)是一种最佳实践,因此它不能在其执行范围内被另一个库覆盖。
$(document).ready(function(){ ... });
或者 $(function(){...});
这指定了在 DOM 完全加载时执行的函数。传递给 .ready() 的处理程序保证在 DOM 准备好后执行,因此这通常是附加所有其他事件处理程序和运行其他 jQuery 代码的最佳位置。当使用依赖 CSS 样式属性值的脚本时,在引用脚本之前引用外部样式表或嵌入样式元素很重要。阅读更多
(function(){ ... })();
这是一个在浏览器解释您的ecma-/javascript
. 因此,您不太可能在DOM elements
此处成功采取行动。它将在 Javascript 中遇到时立即执行。
(function ($) { <-- $ is just an alias for jQuery
$(function () {
....... <--- Here you can use the $ without an issue.
});
})(jQuery); <--- This is done usually to avoid conflicts. Passing jQuery object here
如果您查看 jQuery 核心。它说
// Expose jQuery to the global object
window.jQuery = window.$ = jQuery;
(function ($) {
//
})(jQuery);
这种类型的模块模式在那里非常常用。它调用自己传递对 jQuery 的引用,从而更快地访问变量,因为它现在位于函数的范围内,并且还可以防止全局污染。
第二个:
$(function () {
.......
});
加载 DOM 后运行匿名函数,确保在执行任何代码之前一切就绪。
其他一些库也将$
用作变量名,以确保您使用的是 jQuery 而不是其他 lib var,您将把它传递给一个函数并$
在该范围内命名它。
(function ($) { //<--- naming jQuery to $
$(function () {//now we are sure that we are using $ as jQuery
.......
});
})(jQuery); //<----passing jquery .