在javascript中定义Javascript中的函数

时间:2010-09-01 17:59:12

标签: javascript jquery javascript-framework

我正在开发一个专有网站,而且我遇到了一些问题。我正在使用jQuery和原型,并且我已正确地命名它,所以在这个问题中假设您可以使用$或jQ作为jQuery的命名空间引用。

所以我有一堆函数,一些混合jQuery和javascript,一些简单的javascript,一些jQuery而已。现在,目前一些函数是在document.ready jQuery函数中定义的,有些是在它之外定义的,有点像这样:

jQ(document.ready(function($) {

  if ( ifConfig ) {
    //page check, function calls here
    fnc1();
    fnc2();
    fnc3();
    fnc4();
  }

  function fnc1() {
    //fnc code in here
  }
  function fnc2() {
    //fnc code in here
  }
});  //end document.ready

function fnc3() {
}
function fnc4() {
}

现在这是所有伪代码,您可以假设这些函数是有效的并且在其中包含有效代码。最近我做了一些调试,我的一个函数在文档中声明并调用。已经说它是未定义的。我把它移到了文档之外。已经完成了所有工作。

我基本上试图理解函数如何更好地启动/调用的顺序,所以我的问题是你什么时候在document.ready中声明函数,什么时候在外面声明它们?你只是在那个文件中被调用时才向内部声明。只是?或者我应该只是在那个文件之外声明它们。已经?

感谢。

3 个答案:

答案 0 :(得分:4)

一般来说,你应该申报&定义您自己的namespace,其中包含您的所有应用程序逻辑(包括函数/方法)。这样您就可以避免collision使用您网站上的其他脚本+这样您的代码就更清晰,更容易维护。

var myapp = function(){
    var foobar1 = null,
        foobar2 = null,
        foobar3 = null;

    return {
        getFoobar1:  function(){
           return foobar1;
        },
        getFoobar2:  function(){
           return foobar2;
        },
        setFoobar1:  function(foo){
           foobar1 = foo;
        },
        clickhandler: function(e){
           alert('I am an event handler, and I am not anonymous');
        }
        // etc.
    };
};

$(document).ready(function(){
    var Application = myapp();

    Application.getFoobar2();

    $(document).bind('click', Application.clickhandler);
});

该模式(有些人称之为“方法模式”)创建了一个封闭的函数/对象,它还保证了命名空间中的私有成员变量,只能通过外部的getter函数访问。

这真的只是一个非常基本的例子,你可以推动这个想法&模式延伸,这是非常好的&好事(IMO)。

道格拉斯·克罗克福德(Douglas Crockford)撰写的一本关于这些东西的好书经常被命名和推荐为“Javascript:The Good Parts”。

答案 1 :(得分:0)

(document).ready更多地用于需要在页面加载时执行的事情,而不是函数声明。如果你在(document).ready中声明它们,它们的范围将是该块的本地 - 如果它们仅在本地使用,那很好,它们应该在那里声明。否则,在外面宣布它们。

因此,在您的示例中,如果函数仅在该块中使用,则应在其中声明它们。如果他们另外使用其他地方,他们应该在外面宣布。

答案 2 :(得分:0)

如果函数仅在文档就绪函数中使用,则将其声明为内部,这样就不会污染全局范围。否则,将其声明为外部,以便脚本的其余部分可以访问这些函数。