我是JavaScript的新手并且有一个问题要问。创建新程序时,最好在全局变量/对象中创建所有函数,或者单独创建它们。
例如:
var register = {
members: [],
Member: function(){
},
reset: function(){
},
printMembers: function(){
},
process: function(){
}
};
function init(){
register.process();
};
window.onload = init();
或者像这样:
var members = [];
function Member(){
};
function reset(){
};
function printMembers(){
};
function process(){
};
function init(){
process();
};
window.onload = init();
这可能是一个非常愚蠢的问题......
答案 0 :(得分:2)
创建新程序时,最好在全局变量/对象中创建所有函数,或者将它们全部分开创建。
这是基于意见的,但我会给你一个很好的理由在全局对象中创建所有属性:你不会污染命名空间。这意味着,您不会创建许多全局对象,这些对象将是浏览器中全局对象(window
)的属性。
如果您使用其他人的库,并且如果您和他都将创建全局对象,则HTML中稍后包含的脚本将覆盖在其他脚本中声明的具有相同名称的属性。
完成后,我建议你编写代码如下:
var app = {};
app.members = [];
app.Member = function(){};
app.reset = function(){};
app.printMembers = function(){};
app.process = function(){};
function init() {
app.process();
};
window.onload = init;
另请注意,您应该window.onload = init
,而不是window.onload = init()
。
区别:
使用window.onload = init
,您将onload
中的window
属性设置为init
函数。稍后,当网页完成加载时,有人会要求window
执行其onload
属性,然后window
会执行类似this.onload()
的操作。
使用window.onload = init()
,您正在执行init
并将onload
的{{1}}属性设置为执行{{1}的返回功能。由于每个Javascript函数都返回一些内容(默认情况下为window
),因此您将设置init
。这不是你想要的。
答案 1 :(得分:0)
这是一种品味风格 - 有点像写一篇文章。最重要的是,任何人(或者你,从现在开始的六个月)都可以阅读你的代码并了解正在发生的事情。只关注功能,你自然会开始决定什么是合乎逻辑的。
(Eloquent Javascript)[http://eloquentjavascript.net//]也是一本关于这个主题的好书。