有人可以解释这两个代码块之间的区别吗?当第二种类型更简洁时,为什么我们需要第一种类型。
第一
var Utility;
(function (Utility) {
var Func = (function () {
function Func(param1, param2) {
var self = this;
this.Owner = param2;
}
return Func;
})();
Utility.Func = Func;
})(Utility || (Utility = {}));
第二
var Utility;
(function (Utility) {
Utility.Func = function (param1, param2) {
var self = this;
this.Owner = param2;
}
})(Utility || (Utility = {}));
context:第一个版本是由typescript编译器生成的代码,我试图理解它为什么生成第一个而不是更简单的第二个。
答案 0 :(得分:3)
代码块之间的唯一区别是第一个代码块具有围绕创建Func
函数的代码的函数范围。这样做的唯一原因是创建一个范围,您可以在其中声明在外部范围内不可用的变量:
var Utility;
(function (Utility) {
var Func = (function () {
var x; // a variable in the inner scope
function Func(param1, param2) {
var self = this;
this.Owner = param2;
}
return Func;
})();
// the variable x is not reachable from code here
Utility.Func = Func;
})(Utility || (Utility = {}));
答案 1 :(得分:0)
从我看到它们是相同的,在这两种情况下,你定义函数并使它成为Utility的成员,调用它。 添加它,没有范围差异,没有上下文差异,没有真正的区别。 我认为这只是一个偏好问题。
但是,我可以看到一个潜在的差异,如果内部的一个是async
函数调用,则可能存在差异,因为Utility.Func
最终将undefined
作为https://graph.facebook.com/albumID/photos?fields=id,likes.summary(true),comments.summary(true)&access_token=XXXXXX
一个值,这是第一个的一个非常大的问题,但我怀疑写它的人不会注意到。