javascript - 可以使用 Javascript 命名空间的函数声明吗?

标签 javascript namespaces hoisting

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

例如;

function namespace() {}

对比

let namespace = {};

前者被提升,并保证我附加到命名空间的属性不会遇到“未定义”错误。

我知道它至少适用于我的基本测试,但是这有优点/缺点吗?

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

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

回答:由于我的问题被标记为“基于意见”,我只能推断没有技术原因说明您不应该对命名空间使用函数。

最佳答案

不,你不应该让你的命名空间对象成为函数对象,除非你需要它是可调用的。如果该函数不执行任何操作(如您的示例中所示),请不要使用函数。

提升对您来说没有任何好处。变量声明 let namespacehoisted just as well 。实际上重要的是命名空间的成员是在使用之前创建的,并且它们是通过赋值创建的。只需将它们按照正确的顺序放入文件中即可 - 首先是命名空间对象实例化,然后是该对象的属性(如果尚未将它们创建为对象文字的一部分),最后是使用命名空间的代码。

关于javascript - 可以使用 Javascript 命名空间的函数声明吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47703591/

相关文章:

javascript - 如何在没有 Immutable 的情况下在 React 中设置 Redux?

javascript - 创建带有显示/隐藏标题的 jQuery 幻灯片

javascript - 检测iframe src是否可显示

xml - 如何从 SOAP 消息中获取命名空间的名称?

JavaScript 'hoisting'

javascript - jquery 解除绑定(bind)事件速度增加

javascript - 命名空间变量 - javascript

php - 从 PHP 命名空间中定义全局函数

javascript - 为什么 it() 内部的 cypress 变量保留为分配给该变量的最后一个值,而在 it() 外部它可以正常工作? (例子)

javascript - 对 Javascript 提升感到困惑