两个版本的函数有什么区别
What is the difference between the two versions of functions
谁能解释一下这两个代码块有什么区别?为什么我们需要第一种类型,而第二种类型更简洁。
第一个
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 = {}));
上下文:第一个版本是由打字稿编译器生成的代码,我试图理解为什么它生成第一个而不是更简单的第二个。
据我所知,它们是相同的,在这两种情况下,您都在定义函数并将其作为 Utility 的成员,并调用它。
添加到它,没有范围差异,没有上下文差异,真的没有区别。
我认为这只是一个偏好问题。
但是,我可以看到一个潜在的差异,如果最里面的那个是 async
函数调用,可能会有差异,因为 Utility.Func
最终会有 undefined
作为一个值,这是第一个问题非常大的问题,但我怀疑写它的人不会注意到。
代码块之间的唯一区别是第一个代码块在创建 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 = {}));
谁能解释一下这两个代码块有什么区别?为什么我们需要第一种类型,而第二种类型更简洁。
第一个
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 = {}));
上下文:第一个版本是由打字稿编译器生成的代码,我试图理解为什么它生成第一个而不是更简单的第二个。
据我所知,它们是相同的,在这两种情况下,您都在定义函数并将其作为 Utility 的成员,并调用它。 添加到它,没有范围差异,没有上下文差异,真的没有区别。 我认为这只是一个偏好问题。
但是,我可以看到一个潜在的差异,如果最里面的那个是 async
函数调用,可能会有差异,因为 Utility.Func
最终会有 undefined
作为一个值,这是第一个问题非常大的问题,但我怀疑写它的人不会注意到。
代码块之间的唯一区别是第一个代码块在创建 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 = {}));