是否可以为Javascript命名空间使用函数声明?

时间:2017-12-07 20:52:53

标签: javascript namespaces hoisting

每当我看到引用JS命名空间时,它都是用对象表达式实现的。如果我想在分配任何属性之前确定我的命名空间是否存在,我可以通过函数声明来实例化它吗?

e.g;

function namespace() {}

VS

let namespace = {};

前者被悬挂,并保证我附加到我的命名空间的属性不会遇到" undefined"错误。

我知道它至少对我的基本测试起作用,但对此有利有弊吗?

编辑:另一个例子:https://jsbin.com/nuquxuxinu/edit?js,console

编辑:Bergi提供了一些很好的说明,但我仍然需要确信为什么使用函数作为命名空间是一个坏主意。

答案:由于我的问题被标记为"基于意见"我只能推断,为什么你不应该为命名空间使用函数,没有技术上的原因。

1 个答案:

答案 0 :(得分:1)

不,您不应将命名空间对象设为函数对象,除非您需要它是可调用的。如果函数什么都不做(比如你的例子),不要使用函数。

吊装对您没有任何好处。变量声明 document.body.style.cursor = 'progress'; var type = document.appendEqprop[5].value.toUpperCase(); var valueS = document.appendEqprop[6].value.toUpperCase(); var canSubmit = validateEntry(type,valueS); if (canSubmit) { document.appendEqprop[11].disabled = false; document.body.style.cursor = 'default'; } if (!canSubmit || valueS.length == 0) { document.appendEqprop[11].disabled = true; } hoisted just as well。实际上重要的是命名空间的成员是在使用它们之前创建的,它们是通过赋值创建的。只需在文件中按正确顺序放置它们 - 首先是命名空间对象实例化,然后是该对象的属性(如果它们尚未作为对象文字中的一部分创建),则使用该命名空间的代码。