IIFE
为了提供必要的封装和隔离,ES6 之前的模块会使用立即调用函数表达式(IIFE)将模块的定义封装在匿名闭包中来实现模块模式。
ts
const Foo = (function () {
const _bar = "bar";
return {
bar: _bar,
baz: function () {
console.log(this.bar);
},
};
})();
console.log(Foo.bar); // bar
Foo.baz(); // bar
ts
const FooParam = (function (bar: string) {
return {
bar,
baz: function () {
console.log(this.bar);
},
};
})("bar param");
console.log(FooParam.bar); // bar param
FooParam.baz(); // bar param
ts
const FooExtend = (function (Foo: any) {
Foo.baz = function () {
console.log("baz");
};
return Foo;
})(FooParam || {});
FooExtend.baz(); // baz