- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有一个简单的例子:
Javascript:
function testBut(b){
alert("!");
}
HTML:
<button onclick="testBut(this)">Test</button>
现在我通过 Google Closure 编译器运行我的 .js 脚本(从命令行运行),我想保持 testBut 功能完整。
我在很多地方读到我必须使用 --externs 选项并用导出函数的名称定义另一个文件,在这种情况下它只包含:
function testBut(b){}
另外我需要在我的 js 代码中添加有趣的一行:
window['testBut']=testBut;
那么现在问题:
为了保持所需的功能,Closure 中的那个系统真的很愚蠢,需要完成两个容易出错的步骤吗?
是否没有“@...”注解可以满足同样的目的?我试过@export,但它需要 --generate_exports 选项,但它仍然会生成类似丑陋且无用的 goog.a("testBut", testBut);在目标代码中(我尝试了相同的代码,而那些 goog.a(...) 似乎根本没用),这仍然需要导出文件
理想情况下,我正在寻找简单的注释或命令行开关来告诉“不要删除/重命名此函数”,尽可能简单,不添加代码,不添加其他文件。
谢谢
最佳答案
不要混淆 externs 和 exports。
Externs - 在使用不会与您的源代码一起编译的其他代码时提供类型信息和符号名称。
导出 - 使您的符号、属性或函数可用于其他不会编译的代码。
因此在您的简单示例中,您需要:
function testBut(b){
alert("!");
}
window["testBut"] = testBut;
然而,如果 testBut
仅用于外部调用,这可以进一步简化:
window["testBut"] = function(b) {
alert("!");
};
为什么不总是使用第二种表示法?因为内部使用(编译代码中的调用)必须使用完整的引用语法,这会阻止类型检查并减少压缩。
这个问题经常出现。
一方面,对于应该如何进行导出并没有全局共识。有多种方法可以完成导出。
此外,通过定义导出符号和函数会阻止死代码消除。以图书馆作者为例。作者希望编译他的库以导出所有公共(public)符号。但是,这样做意味着当其他用户将他的库包含在编译中时,不会发生死代码消除。这否定了 ADVANCED_OPTIMIZATIONS 的主要优势之一。
鼓励库作者在文件底部或单独的文件中提供他们的导出,以便其他用户可以排除它们。
之前有人建议提供一个命令行参数来控制基于命名空间的导出。 IE 类似于 --export mynamespace.*
。然而,还没有作者解决这个问题,这不是一个微不足道的变化。
关于javascript - 闭包优化+保留函数名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20565189/
C语言sscanf()函数:从字符串中读取指定格式的数据 头文件: ?
最近,我有一个关于工作预评估的问题,即使查询了每个功能的工作原理,我也不知道如何解决。这是一个伪代码。 下面是一个名为foo()的函数,该函数将被传递一个值并返回一个值。如果将以下值传递给foo函数,
CStr 函数 返回表达式,该表达式已被转换为 String 子类型的 Variant。 CStr(expression) expression 参数是任意有效的表达式。 说明 通常,可以
CSng 函数 返回表达式,该表达式已被转换为 Single 子类型的 Variant。 CSng(expression) expression 参数是任意有效的表达式。 说明 通常,可
CreateObject 函数 创建并返回对 Automation 对象的引用。 CreateObject(servername.typename [, location]) 参数 serv
Cos 函数 返回某个角的余弦值。 Cos(number) number 参数可以是任何将某个角表示为弧度的有效数值表达式。 说明 Cos 函数取某个角并返回直角三角形两边的比值。此比值是
CLng 函数 返回表达式,此表达式已被转换为 Long 子类型的 Variant。 CLng(expression) expression 参数是任意有效的表达式。 说明 通常,您可以使
CInt 函数 返回表达式,此表达式已被转换为 Integer 子类型的 Variant。 CInt(expression) expression 参数是任意有效的表达式。 说明 通常,可
Chr 函数 返回与指定的 ANSI 字符代码相对应的字符。 Chr(charcode) charcode 参数是可以标识字符的数字。 说明 从 0 到 31 的数字表示标准的不可打印的
CDbl 函数 返回表达式,此表达式已被转换为 Double 子类型的 Variant。 CDbl(expression) expression 参数是任意有效的表达式。 说明 通常,您可
CDate 函数 返回表达式,此表达式已被转换为 Date 子类型的 Variant。 CDate(date) date 参数是任意有效的日期表达式。 说明 IsDate 函数用于判断 d
CCur 函数 返回表达式,此表达式已被转换为 Currency 子类型的 Variant。 CCur(expression) expression 参数是任意有效的表达式。 说明 通常,
CByte 函数 返回表达式,此表达式已被转换为 Byte 子类型的 Variant。 CByte(expression) expression 参数是任意有效的表达式。 说明 通常,可以
CBool 函数 返回表达式,此表达式已转换为 Boolean 子类型的 Variant。 CBool(expression) expression 是任意有效的表达式。 说明 如果 ex
Atn 函数 返回数值的反正切值。 Atn(number) number 参数可以是任意有效的数值表达式。 说明 Atn 函数计算直角三角形两个边的比值 (number) 并返回对应角的弧
Asc 函数 返回与字符串的第一个字母对应的 ANSI 字符代码。 Asc(string) string 参数是任意有效的字符串表达式。如果 string 参数未包含字符,则将发生运行时错误。
Array 函数 返回包含数组的 Variant。 Array(arglist) arglist 参数是赋给包含在 Variant 中的数组元素的值的列表(用逗号分隔)。如果没有指定此参数,则
Abs 函数 返回数字的绝对值。 Abs(number) number 参数可以是任意有效的数值表达式。如果 number 包含 Null,则返回 Null;如果是未初始化变量,则返回 0。
FormatPercent 函数 返回表达式,此表达式已被格式化为尾随有 % 符号的百分比(乘以 100 )。 FormatPercent(expression[,NumDigitsAfterD
FormatNumber 函数 返回表达式,此表达式已被格式化为数值。 FormatNumber( expression [,NumDigitsAfterDecimal [,Inc
我是一名优秀的程序员,十分优秀!