Javascript 显示模块模式中的额外括号

Javascript 显示模块模式中的额外括号,javascript,typescript,Javascript,Typescript,我正在查看TypeScript编译器生成的一些代码,我注意到它将函数从显示的对象模式包装到额外的括号中。我想这是有原因的,原因是什么 var Castle = (function () { function Castle(name) { this.name = name; } Castle.prototype.Build = function () { var element = document.getElementById("textArea"); con

我正在查看TypeScript编译器生成的一些代码,我注意到它将函数从显示的对象模式包装到额外的括号中。我想这是有原因的,原因是什么

var Castle = (function () {
 function Castle(name) {
     this.name = name;
 }
 Castle.prototype.Build = function () {
     var element = document.getElementById("textArea");
     console.log("Built " + this.name);
 };
 return Castle;
})();
var test = new Castle("Winterfell");
test.Build();

请注意,外部函数位于()。没有它们,代码似乎可以正常工作。

这只是为了弄清楚函数表达式的组成部分

显然,这也是可行的:

var test = function () { return 'test'; }();
但是,与此略有不同:

var test = (function () { return 'test'; })();
与不带换行括号的函数的主要区别在于,上下文定义了函数是被解释为函数表达式还是函数声明

例如,如果要从第一个示例中删除
var test=
,将导致语法错误,因为无法调用函数声明

如果他们的目标是写出可读的代码,那么这可能就是他们选择使用包装括号的原因

另一方面,并不是每个人都同意正确的生活方式

例如,Crockford建议:

var test = (function () { return 'test'; }());

权力游戏应用程序?=)这实际上是一个讨论,源于所有与权力游戏相关的例子。免责声明:那本书是我写的。