TypeScript模块中的JavaScript IIFE中默认参数的目的是什么?

atc*_*way 2 javascript iife typescript

如果我创建一个简单的TypeScript module命名test,它将类似于以下内容:

module test
{
    export class MyTest {
        name = "hello";
    }
}
Run Code Online (Sandbox Code Playgroud)

结果将JavaScript创建一个IIFE类似于以下内容的:

var test;
(function (test) {
    var MyTest = (function () {
        function MyTest() {
            this.name = "hello";
        }
        return MyTest;
    })();
    test.MyTest = MyTest;
})(test || (test = {}));
Run Code Online (Sandbox Code Playgroud)

我不明白是什么是底了以下行的目的IIFE,它包含的参数为function

(test || (test = {}));
Run Code Online (Sandbox Code Playgroud)

结果函数还接受参数test

(function (test) {
Run Code Online (Sandbox Code Playgroud)

我理解使用参数传递jQuery诸如' object like之类})(jquery);的结果时,结果函数可以采用like这样的别名(function ($) {。但是,我只是没有看到(test || (test = {}));争论的目的。

我知道这test.MyTest = MyTest;是公开的公共方法MyTest,但是(test || (test = {}));这些参数为什么起作用以及如何起作用?

bas*_*rat 5

它允许您使模块开放式。例如

(function (test) {
    var MyTest = (function () {
        function MyTest() {
            this.name = "hello";
        }
        return MyTest;
    })();
    test.MyTest = MyTest;
})(test || (test = {}));


(function (test) {
    var SecondTest = (function () {
        function SecondTest() {
            this.name = "hello";
        }
        return SecondTest;
    })();
    test.SecondTest= SecondTest;
})(test || (test = {}));
Run Code Online (Sandbox Code Playgroud)

第一次test将被undefined分配{}。下次已经定义好了,这就是我们要扩展的内容SecondTest