我想知道Javascript如何维护单个全局命名空间。它是否有任何链接器链接与该页面相关的所有JS并维护单个全局命名空间?
答案 0 :(得分:2)
这里要理解的重要一点是,页面中的所有JavaScript(无论是内联还是通过<script src="...">
引入)都基本上连接并在同一个VM中执行。没有必要“维护单个全局命名空间”,因为所有代码都在同一个地方进行评估并共享同一个全局对象window
。
请记住,尽管现代引擎do compile JS to native code内部存在,但JS并不是像C这样的编译语言。因此,没有链接器。
您可能希望了解称为context的VM概念。 V8 VM支持运行使用一个全局对象的代码以及使用不同全局对象的代码。这允许在<iframe>
中运行的代码获得自己的全局对象,但仍然可以从父页面的上下文中访问和调用方法。