以下是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/
答案 0 :(得分:0)
区别在于范围 - 在第一种情况下,所有内容都在匿名函数范围中定义,在第二种情况下在全局范围内定义。 IIFE的好处是模块封装,您可以在每个模块中定义一个具有相同名称的函数/类,而不会影响另一个模块。