立即执行函数 实现单例模式

436 阅读1分钟

立即执行函数顾名思义是定义一个函数并且立即调用。语法包括两部分一个部分是圆括号里面定义一个匿名函数,并在后面加上() 表示立即执行。

语法

(function(){ statements})()

 或者

(function(){statements}())

函数里有独立的定义域 外面访问不了内部的变量。

单例模式

把立即执行函数赋值给一个变量,这个变量保存的不是这个函数而是返回的结果

var result = (function () {
    var name = "Barry";
    return name;
})();
// IIFE 执行后返回的结果:
result; // "Barry"

单例模式是一种常见的设计模式,单例模式能够保证一个类仅有唯一的实例,并提供一个全局访问点,可以很好节省内存。实现如下:

function Animal(name) {
  this.name = name
}

const AnimalSingle = (function () {
  let animalSingle = null

  return function (name) {
    if(animalSingle){
      return animalSingle
    }
    return animalSingle = new Animal(name)
  }
})();

const animal1 = new AnimalSingle('dog')
const animal2 = new AnimalSingle('cat')

console.log(animal1.name); // dog
console.log(animal2.name); // dog