在JavaScript中,将伪类封装在IIFE中有什么好处

In JavaScript, what is the benefit of wrapping a pseudo class in an IIFE?

本文关键字:什么 IIFE JavaScript 封装      更新时间:2023-09-26

以下是IIFE 中的伪类示例

// cow.js
(function(exports) {
  "use strict";
  function Cow(name) {
    this.name = name || "Anon cow";
  }
  exports.Cow = Cow;
  Cow.prototype = {
    greets: function(target) {
      if (!target)
        throw new Error("missing target");
      return this.name + " greets " + target;
    }
  };
})(this);

与以下相比,这有什么好处:

  "use strict";
  function Cow(name) {
    this.name = name || "Anon cow";
  }
  exports.Cow = Cow;
  Cow.prototype = {
    greets: function(target) {
      if (!target)
        throw new Error("missing target");
      return this.name + " greets " + target;
    }
  };

这两种方法不都会将Cow的构造函数添加到全局范围中吗?

cow.js文件通过HTML文档包含在脚本标记中。这意味着this的值是window。这不是两个例子用来添加函数的同一个全局作用域吗?

有人能提供一个在模块或不同范围中使用它的例子吗?

这不是重复的,因为以下相关问题中的IFFE没有参数-将整个Javascript文件包装在匿名函数中(如"(function(){…})()")的目的是什么?

代码是从这里复制的:https://nicolas.perriault.net/code/2013/testing-frontend-javascript-code-using-mocha-chai-and-sinon/

区别在于作用域-在第一种情况下,所有内容都在匿名函数作用域中定义,在第二种情况下在全局作用域中。IIFE的好处是模块封装,您可以在每个模块中定义具有相同名称的函数/类,而不会影响另一个模块。