How Javascript maintains a single global namespace
我想知道JavaScript如何维护单个全局命名空间。它是否有链接所有与该页相关的JS并维护单个全局命名空间的链接器?
- 请阅读:stackoverflow.com/questions/9773964/…
- 这应该有帮助:stackoverflow.com/questions/9773964/…
- 保持每个脚本元素完全独立不是很困难吗?尤其是因为它们都需要与同一个DOM交互。
- @昆汀:不是真的。每一个都有自己独立的上下文,所以让每个也有一个上下文也很简单。然而,这将是一个重大的突破性变化,因此行为将保持其一贯的方式。
这里要理解的重要一点是,页面中的所有javascript(无论是内联的还是通过拉入的)基本上都是在同一个VM中连接和执行的。不需要"维护单个全局命名空间",因为所有代码都在同一位置进行评估,并且共享相同的全局对象window。
记住,尽管现代引擎在内部将JS编译为本机代码,但JS并不像C那样是编译语言,因此没有链接器。
有一个虚拟机概念,您可能希望理解为上下文。V8VM支持运行使用一个全局对象的代码,以及使用不同全局对象的代码。这允许在中运行的代码获取自己的全局对象,但仍然可以从父页的上下文访问和调用方法。