我在专有网站上工作,遇到了一些问题。我将 jQuery 与原型(prototype)一起使用,并且已经正确命名空间,因此在这个问题中假设您可以使用 $ 或 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 中声明和调用的函数说它是未定义的。我将它移到了 document.ready 之外,然后一切又恢复正常了。
我主要是想更好地理解函数启动/调用的顺序,所以我的问题是什么时候在 document.ready 中声明函数,什么时候在外部声明它们?您是否仅在该文档中调用它们时才在内部声明。仅就绪?或者我应该总是在该文档之外声明它们。准备好了吗?
谢谢。
最佳答案
通常,您应该声明和定义您自己的命名空间
,您的所有应用程序逻辑(包括函数/方法)都位于该位置。这样您就可以避免与您网站上的其他脚本发生冲突
+ 这样您的代码就会更加清晰并且更易于维护。
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);
});
该模式(有些人称之为“方法模式”)创建了一个封闭的函数/对象,它还保证您的命名空间内的私有(private)成员变量,只能通过 getter
函数从外部访问。
这实际上只是一个非常基本的示例,您可以将这个想法和模式推向扩展,这非常好,也是一件好事 (IMO)。
Douglas Crockford 的“Javascript:The Good Parts”是一本经常被命名和推荐的关于这方面的好书。
关于javascript - 在 jQuery 中的 Javascript 中定义函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3620822/