我看过JavaScript文件的格式有两种不同的方式,我不知道它们有什么不同。
<script>
function foo () { /* a function */ }
</script>
name = {
foo: function () { /* a function */ }
foo2: function () { /* a different function */ }
}
这两种编写JavaScript的方式有什么区别,为什么我会选择另一种方式。
答案 0 :(得分:5)
第二种方法将函数创建为对象name
的成员。这具有将它们封装在name
内的效果,而不是在全局命名空间内创建它们。由于它利用全局命名空间的方式,JavaScript在变量和函数命名方面可能非常有问题。例如,在函数内部声明变量时忘记使用var
关键字将导致变量具有全局范围而不是函数范围。
因此,第二种方法允许您在全局级别只创建一个变量,并将其用作多个变量和函数的容器,而不必担心与其他全局函数冲突。变量名称。
您将看到的常见模式(并在Douglas Crockford的 Javascript:The Good Parts 中推荐):
var myApplication = {
var1: 'some variable';
var2: 'some other variable';
var3: 12345
foo1: function() {
// do something
},
foo2: function() {
// do something else
}
};
实际上,我在这里创建的唯一全局变量是myApplication
,这不太可能导致与全局命名空间中的任何其他名称冲突。我可以调用我的函数:
myApplication.foo1();
myApplication.foo2();
答案 1 :(得分:0)
第二种形式称为命名空间。
它允许您在其中定义函数和varibales。
将其视为java中的类,
您可以声明只能通过命名空间访问的方法和属性。
在您的示例中,它允许您定义2个名为foo的函数。
一个是全球性的(第一个) 一个在名为name(第二个)的对象内部
如果要在某处调用第二个,则必须提供命名空间 例如:
name.foo()