Javascript 显示模块模式中的额外括号
我正在查看TypeScript编译器生成的一些代码,我注意到它将函数从显示的对象模式包装到额外的括号中。我想这是有原因的,原因是什么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
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'; }());
权力游戏应用程序?=)这实际上是一个讨论,源于所有与权力游戏相关的例子。免责声明:那本书是我写的。