javascript - 在 JavaScript 中,将伪类包装在 IIFE 中有什么好处?

标签 javascript iife

这是 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 的值是窗口。这两个示例将函数添加到的全局范围不是相同的吗?

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

这不是重复的,因为以下相关问题中的 IFFE 不采用参数 - What is the purpose of wrapping whole Javascript files in anonymous functions like “(function(){ … })()”?

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

最佳答案

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

关于javascript - 在 JavaScript 中,将伪类包装在 IIFE 中有什么好处?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33629032/

相关文章:

javascript - 设置输入数字的格式

javascript - 具有现代 ES6 javascript 类的方法的局部临时变量

javascript - 涉及IIFE的吊装顺序,具体示例

javascript - 将 IIFE 的公共(public)成员分配给变量与返回对象之间有什么区别

javascript - 自动执行匿名 JavaScript 函数的括号位置?

javascript - 立即调用函数表达式而不使用分组运算符

javascript - 什么时候需要返回嵌套的 Promise?

javascript - html Canvas 绘图显示通过

javascript - javascript 变量中的 asp.net razor 特殊字符问题

c# - 下载文件时iframe onload