有人可以解释一下这两个代码块之间有什么区别吗?为什么我们需要第一种类型,而第二种类型更简洁。
第一
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 = {}));
上下文:第一个版本是由 typescript 编译器生成的代码,我试图理解为什么它生成第一个版本而不是更简单的第二个版本。
最佳答案
代码块之间的唯一区别在于,第一个代码块具有围绕创建 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 = {}));
关于javascript - 两个版本的函数有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32107344/