只使用常量的静态javascript函数会被编译为常量吗
Will static javascript function using only constants be compiled to constant
将使用以下javascript
var StaticTest_A = (function () {
function StaticTest_A() {
}
StaticTest_A.GetConstant = function () {
return StaticTest_B.MyNumber + StaticTest_B.MyNumber;
};
return StaticTest_A;
})();
var StaticTest_B = (function () {
function StaticTest_B() {
}
StaticTest_B.MyNumber = 5;
return StaticTest_B;
})();
从该TypeScript 生成
class StaticTest_A
{
static GetConstant():number
{
return StaticTest_B.MyNumber + StaticTest_B.MyNumber;
}
}
class StaticTest_B
{
static MyNumber = 5;
}
则StaticTest_A.GetConstant()
返回一个常量,还是每次调用都会计算该函数?
不,该表达式每次都会运行,它应该运行,因为正如Pointy所指出的,StaticTests_B.MyNumber
可能在此期间发生变化。此外,TypeScript不会更改您编写的代码以提高性能——这实际上不是编译器的目标。
如果出于性能原因,您只希望计算一次,那么您必须想出自己的解决方案。例如,您可以创建一个可重用的decorator,它在第一次运行时缓存值,然后返回缓存的值。然后你可以在任何你喜欢的地方使用这个装饰器:
function methodMemoize(target: Function | Object, key: string, descriptor: TypedPropertyDescriptor<() => any>) {
const originalValue = descriptor.value;
let hasRun = false;
let returnedValue: any;
descriptor.value = function(...args: any[]) {
if (!hasRun) {
returnedValue = originalValue.apply(this, args);
hasRun = true;
}
return returnedValue;
};
}
class StaticTest_A
{
@methodMemoize
static GetConstant()
{
console.log("run only once");
return StaticTest_B.MyNumber + StaticTest_B.MyNumber;
}
}
class StaticTest_B
{
static MyNumber = 5;
}
StaticTest_A.GetConstant(); // "run only once", returns 10
StaticTest_A.GetConstant(); // returns cached 10
相关文章:
- AngularJS指令出错-无法读取属性'编译'的未定义
- 如何使用ViewCompiler手动编译DOM的一部分
- 预编译的车把模板使文件大小加倍
- Mocha react本地路由器编译错误
- Javascript-在哪里放置常量,全局或本地
- Babel编译错误:找不到模块核心js/library/fn/get迭代器
- JavaScript常量-作为参数传递或直接使用
- 在编译阶段后创建新的DOM树,或者继续使用原始修改的DOM
- 如何在Windows中将Javascript文件编译成二进制文件
- 浏览器是否持久缓存脚本元素的编译版本
- GWT:有没有一种方法可以修改GWT在编译中使用的Cast.java文件
- 使用脚本#编译代码(独立)
- 是否可以使用有角度的HTML文档进行$编译
- 使用Gulp手柄部分编译为单个HTML文件
- AngularJS:带有HTML和angular表达式的指令;编译”;具有外部范围的内容
- Javascript赢得'不能在IE上编译,但可以在Chrome上运行
- Bootstrap CSS和JS我必须将它们包含在单独的文件中,或者可以编译它们
- 在 ng-if 编译后访问指令中的 DOM 元素
- 当单元格内容由于forumula从另一个工作表编译数据而更改时发送电子邮件
- 只使用常量的静态javascript函数会被编译为常量吗