我有一些大型 js 文件,它们的函数和对象位于全局范围内,并且它们之间有函数调用。有没有一种相对简单的方法可以将它们置于本地范围内。
<script src="fileA.js"></script>
<script src="fileB.js"></script>
<script src="fileC.js"></script>
我试过把(function(){
A 文件的开头和 })();
最后一个文件的结尾放在一起,但它不起作用。
10x 为您提供帮助 BR
我有一些大型 js 文件,它们的函数和对象位于全局范围内,并且它们之间有函数调用。有没有一种相对简单的方法可以将它们置于本地范围内。
<script src="fileA.js"></script>
<script src="fileB.js"></script>
<script src="fileC.js"></script>
我试过把(function(){
A 文件的开头和 })();
最后一个文件的结尾放在一起,但它不起作用。
10x 为您提供帮助 BR
不,没有。
您最接近的方法是将它们设置为通过命名空间(一个单一的全局变量,其名称被选择以使冲突不太可能发生)共享变量,例如window.YOUR_SCRIPT_NAME = {}
.
你不能这样包装它,因为每个脚本仍然是单独解析的(<script>
标签不能通过将内容包含到文件中来工作)。
您可以简单地手动连接文件,放置function(){ ... }()
整个内容,并将这个新连接的脚本作为一个单元使用。
如果脚本内容的重写是可行的,您可以让它们使用工厂方法中为它们提供的共享范围,就像 Quentin 在另一个答案中提到的那样。但是,更好的解决方案(如果您可以重写并且这是一个更大的项目)将切换到具有依赖关系的完整模块概念,例如AMD。
您可以使用 Ajax 将 fileA.js 的内容作为字符串获取,而不是使用脚本 src="fileA.js"。比评估您的本地范围。
eval.call(yourlocalscope, string)