因此,为了澄清这个问题,我理解IIFE和对象字面是什么。但是,我不确定这两个例子之间的区别是什么(除了一个是函数而另一个是对象文字的事实):
示例1:
(function(){
var myStuff = {
arbitraryValue: 42
}
return myStuff.arbitraryValue;
})();
示例2:
(function(){
var myStuff = function() {
return {
arbitraryValue: 42
};
}
return myStuff().arbitraryValue;
})();
两个示例都返回相同的结果,并且(几乎)以相同的方式调用。但是:
1)它们之间的根本区别是什么?
2)使用其中一个是否有益处?
3)我见过代码(在第二个例子中)return myStuff.arbitraryValue
与return myStuff().arbitraryValue
的作用相同。怎么可能?
4)如果我只是想避免全局冲突并编写干净的代码,这是否有点过分?
5)这些例子中的任何一个都被认为是“最佳实践”,还是有其他选择?
非常感谢提前!
答案 0 :(得分:3)
1)它们之间的根本区别是什么?
第一个(可能)使用较少的CPU周期,因为它只有一个较少的函数调用而且写入较少。它也更容易理解,因此更容易维护。
2)使用一个比另一个好吗?
第一种使用较少的代码,可能更容易理解和维护。
3)我见过代码,其中(在第二个例子中)返回myStuff.arbitraryValue的工作方式与返回myStuff()。arbitraryValue相同。怎么可能?
也许使用get,JavaScript™但不是ECMAScript的功能。
4)如果我只是想避免全局冲突并编写干净的代码,这是否有点过分?
是的,虽然您没有显示返回值的内容。在这个例子中,它消失在以太中。
5)这些例子中的任何一个都被认为是“最佳实践”,还是有其他选择?
“Best”根据客观标准推断出与其他不太喜欢的事物相比较。如果没有这些标准(可能是某些标准:速度,稳健性,可维护性,支持或其他特征,可取与否),则无法确定。
如果您提出您想要使用其中一种情况的情况,可以根据建议的标准(或您可能拥有的其他方式)以及与替代方案进行比较,就是否有更好的方法提供建议。