0

我有以下代码:

(function($) {
  "use strict";

  $(function() {
    // jQuery code here, eg:
    $('body').css('padding-top', $('.nav').height());
    // I want to call that func here...
  });

}(jQuery));

和自定义功能:

function xyz(a,b) {
  // do something with "a" and "b"
}

我应该把我的自定义函数放在哪里?之前(function($) {,之前$(function() {,还是里面$(function() {});

4

2 回答 2

2

区别在于范围。

Location              :  Scope
----------------------+--------------------------------------------------------
before (function($) { :  in global scope, easy to call & modify from everywhere 
before $(function() { :  in "source module" scope / jQuery closure
inside $(function() { :  in "$(function" scope 

因此,该选择为您提供了组织对代码的访问的方法。在大多数情况下,您希望隐藏内容以防止意外交互,但在某些情况下(例如日志功能),您希望从 Web 应用程序的任何地方进行访问。

如果你不需要xyz()从外面打电话$(function,把它放在里面。如果您只需要在模块中调用它,请将其保留在( .. (jQuery)). 如果您需要从任何地方调用它,请将其保留在全局范围之外。

于 2014-03-17T15:17:59.053 回答
1

由于您想在准备好的处理程序中调用该函数,因此在其中声明它

jQuery(function ($) {
    "use strict";

    // jQuery code here, eg:
    $('body').css('padding-top', $('.nav').height());
    // I want to call that func here...
    xyz();

    function xyz(a, b) {
        // do something with "a" and "b"
    }
});

但是,如果您想xyz从 dom 就绪处理程序的范围之外进行访问,则必须在 dom 就绪处理程序的范围之外声明它。现在该方法是 dom 就绪处理程序的本地方法,因此只能在其中访问。

同样如上所示,您可以缩短 IIFE 和 dom 就绪处理程序的使用时间,如上所示

于 2014-03-17T14:54:02.567 回答