我应该在Javascript代码中放置函数?

时间:2014-03-17 14:51:50

标签: javascript jquery function placement

我有以下代码:

(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() {});之内?

之前

2 个答案:

答案 0 :(得分: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))内。如果您需要从任何地方调用它,请将其置于全局范围之外。

答案 1 :(得分:1)

因为你想在ready处理程序中调用函数,所以在其中声明它

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"
    }
});

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

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