9

为什么要这样写代码Jquery?

(function ($) {
    $(function () {
     .......
    });
})(jQuery);
4

4 回答 4

14

这称为闭包以避免与正在使用的其他库发生冲突$。这样,您可以确保$在该函数中使用并jQuery作为参数传递。

(function ($) {
   $(function () {
    .......
   });
})(jQuery); //<----passing jquery to avoid any conflict with other libraries.

来自文档:

将 jQuery 传递给将其映射到美元符号的 IIFE(立即调用函数表达式)是一种最佳实践,因此它不能在其执行范围内被另一个库覆盖。

这通常用于创作插件。在这里阅读更多

于 2013-03-31T06:06:12.587 回答
11
  • $(document).ready(function(){ ... }); 或者 $(function(){...});

    这指定了在 DOM 完全加载时执行的函数。传递给 .ready() 的处理程序保证在 DOM 准备好后执行,因此这通常是附加所有其他事件处理程序和运行其他 jQuery 代码的最佳位置。当使用依赖 CSS 样式属性值的脚本时,在引用脚本之前引用外部样式表或嵌入样式元素很重要。阅读更多

  • (function(){ ... })();

    这是一个在浏览器解释您ecma-/javascript. 因此,您不太可能在DOM elements此处成功采取行动。它将在 Javascript 中遇到时立即执行。

阅读更多

类似问题

类似问题 2

您的代码说明

(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;

阅读更多

jQuery.noConflict()

于 2013-03-31T06:05:24.843 回答
2
(function ($) {
  //
})(jQuery);

这种类型的模块模式在那里非常常用。它调用自己传递对 jQuery 的引用,从而更快地访问变量,因为它现在位于函数的范围内,并且还可以防止全局污染。

第二个:

$(function () {
    .......
});

加载 DOM 后运行匿名函数,确保在执行任何代码之前一切就绪。

于 2013-03-31T06:09:22.930 回答
1

其他一些库也将$用作变量名,以确保您使用的是 jQuery 而不是其他 lib var,您将把它传递给一个函数并$在该范围内命名它。

(function ($) { //<--- naming jQuery to $
   $(function () {//now we are sure that we are using $  as jQuery  
    .......
   });
})(jQuery); //<----passing jquery .
于 2013-03-31T06:10:14.630 回答