我正在开发一个专有网站,而且我遇到了一些问题。我正在使用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中声明函数,什么时候在外面声明它们?你只是在那个文件中被调用时才向内部声明。只是?或者我应该只是在那个文件之外声明它们。已经?
感谢。
答案 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)
如果函数仅在文档就绪函数中使用,则将其声明为内部,这样就不会污染全局范围。否则,将其声明为外部,以便脚本的其余部分可以访问这些函数。