命名空间曾经是 ECMAScript(旧的 ECMAScript 4)的考虑因素,但后来被取消了。正如 Brendan Eich 在此消息中所说:
ES4 中命名空间的用例之一是早期绑定(使用内部命名空间),无论是为了性能还是为了程序员的理解——运行时名称绑定不可能与任何早期绑定不一致。但是在任何动态代码加载场景(如 Web)中的早期绑定都需要优先级或保留机制,以避免早期与晚期绑定冲突。
另外,正如一些 JS 实现者所关注的那样,多个开放
的命名空间会增加运行时成本,除非实现工作
更加困难。出于这些原因,命名空间和早期绑定(如之前的包
,今年四月)必须取消。
但我不确定我是否理解所有这些。究竟什么是优先级或保留机制,为什么需要其中任何一个?此外,早期绑定和命名空间必须齐头并进吗?出于某种原因,我无法解决所涉及的问题。任何人都可以尝试更充实的解释吗?
另外,为什么命名空间会带来运行时成本?在我看来,我不禁看到命名空间和使用闭包的函数在概念上几乎没有区别。例如,Yahoo 和 Google 都有 YAHOO 和 google 对象,它们“行为类似于”命名空间,因为它们在单个访问点中包含所有公共和私有变量、函数和对象。那么,为什么命名空间在实现上会有如此显着的不同呢?也许我只是对命名空间的确切含义有一个误解。
为了赏金,我想知道两件事:
- 命名空间是否需要早期绑定?
- 命名空间实现与具有私有成员的对象有何不同?