这两个版本的函数有什么不同?

What is the difference between the two versions of functions

本文关键字:函数 什么 版本 两个      更新时间:2023-09-26

有人能解释一下这两个代码块的区别吗?既然第二种更简洁,为什么我们还需要第一种呢?

首先

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 = {}));

从我看到的它们是相同的,在这两种情况下,你都在定义函数并使其成为实用程序的成员,调用它。再加上,没有范围差异,没有背景差异,没有真正的差异。我认为这只是个人喜好的问题。

但是,我可以看到一个潜在的差异,如果非常内部的一个是async函数调用,可能会有差异,因为Utility.Func最终将undefined作为一个值,这是第一个非常大的问题,但我怀疑写它的人不会注意到。