发现了TypeScript后,我玩了在线编译器,生成的JavaScript代码让我怀疑函数表达式。全局范围内的函数表达式
一个简单的打字稿类:
class Person {
firstName: String = "John";
lastName: String = "Doe";
}
结果在下面的JavaScript代码:
var Person = (function() {
function Person() {
this.firstName = "John";
this.lastName = "Doe";
}
return Person;
})();
这让我不知道为什么他们选择了与自动执行功能,走的时候更简单的东西可能有足够了。与变量名称相同的内部函数的目的是什么?
又为什么不走的东西比较简单,如:
var Person = function() {
this.firstName = "John";
this.lastName = "Doe";
};
甚至:
function Person() {
this.firstName = "John";
this.lastName = "Doe";
}
至于我可以告诉使用在全球范围函数表达式没有提供优点,只有在声明之前不能调用该函数的缺点。
我很快玩过,找不到任何有效的理由。即使对于私有静态变量,他们也没有使用它们的模块范围,因为私有仅在编译时执行。 – plalx
这只是编译器的一个缺陷。类将始终编译为IEFE,因为“模块”模式有助于组织类构造代码,并允许静态(全班范围的“私有”)变量。当他们不需要它们时,他们忘了解开IEFE。 – Bergi