Skip to content

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