【发布时间】:2017-07-02 07:03:07
【问题描述】:
我即将开始为应用程序构建一个小型 javascript 模块。我接触过两种不同的代码组织方式:对象字面量和 IIFE。我知道在 IIFE 中,所有变量和函数都是私有的,除非另外公开,但是还有什么其他原因可以让我在对象文字上使用它吗?
我为什么要使用对象字面量:
var gojiraSays = 'Toxic Garbage Island!!!'
var app = {
printStuff: function(){
console.log(gojiraSays)
}
}
...再说 IIFE 版本:
var app = (function(){
var gojiraSays = 'Toxic Garbage Island!!!'
var yellGojira = function(){
console.log(gojiraSays);
}
return{
yellGojira: yellGojira
}
}());
app.yellGojira();
【问题讨论】:
-
这取决于太多不同的事情。例如,如果您打算将您的模块与 WebPack 之类的东西一起使用,那么 IIFE 是完全多余的。
-
编辑后,是的,包装在 IIFE 中的优点是封装(没有其他东西可以与您的
gojiraSays混淆)。在其他上下文中有 IIFE(与对象文字不同),例如在for或while循环中捕获局部变量的值,而不是变量本身用于异步回调 (here)。 -
这是两个不同的东西。 IIFE 处理(私有)变量的封装,而对象提供结构来组合/分组属于一起的事物。 IIFE 不提供结构,对象不提供封装。你的问题就像问,最喜欢的是:函数还是变量?您将需要两者,并且可能会将它们结合起来。
标签: javascript