我一直在 JavaScript
和 AngularJS
中使用 IIFE,并且一直使用以下结构:
方法一:
//IIFE Immediately Invoked Function Expression
(function () {
}());
但是,我经常看到以下情况,其中将变量分配给
IIFE
方法二:
//IIFE Immediately Invoked Function Expression assigned to doStuff variable
var doStuff = (function () {
}());
注意: 这个问题是 NOT 关于这个模式是什么或 IIFE 是什么。这特别涉及为什么在 IIFE 上使用返回变量及其与 Angular 实践的关系。
在 Angular 方法 1 中工作正常,但在我看到的许多原始 JS 示例中,使用了方法 2。我的假设是任何封装在
doStuff
中的东西都可以通过它访问并且可以调用。但是,我不是 100% 确定这两种方法之间的确切推理或区别,需要一些帮助来理解何时使用不同的方法? 最佳答案
方法#2 的原因是您会在 IIFE 中找到返回某些内容的代码(通常但不一定是对象或函数)。 IIFE 返回的是最终被分配的内容。例如。:
//IIFE Immediately Invoked Function Expression assigned to doStuff variable
var doStuff = (function () {
var privateInformationForDoStuff = 0;
function doStuff() {
console.log(++privateInformationForDoStuff);
}
return doStuff;
}());
在那里,变量最终成为对函数的引用,每次调用该函数时,都会为我们提供一个比前一次更高的数字。 IIFE 是为了确保没有任何东西可以修改
privateInformationForDoStuff
变量,它对 doStuff
函数完全私有(private)。它的常见用途是创建具有各种功能的对象,有时称为模块,它们也可能具有仅在“模块”中共享的私有(private)信息:
var MyApp = (function() {
var privateModuleInformation;
var morePrivateModuleInformation;
// ...
function doThis() {
// ...
}
function doThat() {
// ...
}
function doTheOther() {
// ...
}
return {
doThis: doThis,
doThat: doThat,
doTheOther: doTheOther
};
})();
关于javascript - 为什么将 IIFE 分配给变量?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26451697/