Javascript闭包编译器-导出全局变量

2023-12-23

我的 web 应用程序基于一个通用脚本,我在其中定义通用函数和全局变量以及处理这些函数的动态加载脚本。到目前为止,我发现导出全局变量的唯一方法是将任何出现的事件替换为window["myGlobalVar"]但我觉得它很丑。有更好的办法吗?

这是一个例子

// commonscript.js before compilation
function incrementVariable() {window["myGlobalVar"]++;}
window["incrementVariable"] = incrementVariable;
window["myGlobalVar"] = 0;

在另一个脚本中

alert(myGlobalVar); // <= alerts 0
incrementVariable();
alert(myGlobalVar); // <= alerts 1

我正在寻找一种直接使用的方法myGlobalVar在这两个文件中,因为它会更优雅。但是,我需要设置window["myGlobalVar"]指向指针而不是对象的副本,我不确定如何在简单类型上执行此操作。

是否可以?正在封装myGlobalVar in an Object唯一的其他方法是什么?

非常感谢你的灯。


新答案

闭包编译器支持@nocollapse注释可防止属性折叠为全局变量。这允许属性在导出时是可变的。

@nocollapse不会阻止重命名 - 您仍然需要导出属性来完成此操作。

@nocollapse目前仅在从源代码编译时支持。它将包含在下一个版本中 - 即版本AFTERv20150315 版本。

旧答案

@expose现已弃用。编译器会警告任何使用@expose

有一个新的但迄今为止尚未记录的注释:@expose。此单个注释将导出属性并防止其从构造函数中折叠。这听起来非常适合您的情况 - 但它需要您的变量是对象的属性。

但是,请谨慎使用。任何具有 @expose 的属性都不会被重命名,也不会作为死代码被删除。这对于 javascript 库编写者的使用来说尤其成问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Javascript闭包编译器-导出全局变量 的相关文章

随机推荐