在IIFE中返回对象的对象文字和函数之间有什么区别和好处/缺点?

时间:2014-05-14 01:50:42

标签: javascript object-literal iife

因此,为了澄清这个问题,我理解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.arbitraryValuereturn myStuff().arbitraryValue的作用相同。怎么可能?
4)如果我只是想避免全局冲突并编写干净的代码,这是否有点过分? 5)这些例子中的任何一个都被认为是“最佳实践”,还是有其他选择?

非常感谢提前!

1 个答案:

答案 0 :(得分:3)

  

1)它们之间的根本区别是什么?

第一个(可能)使用较少的CPU周期,因为它只有一个较少的函数调用而且写入较少。它也更容易理解,因此更容易维护。

  

2)使用一个比另一个好吗?

第一种使用较少的代码,可能更容易理解和维护。

  

3)我见过代码,其中(在第二个例子中)返回myStuff.arbitraryValue的工作方式与返回myStuff()。arbitraryValue相同。怎么可能?

也许使用getJavaScript™但不是ECMAScript的功能。

  

4)如果我只是想避免全局冲突并编写干净的代码,这是否有点过分?

是的,虽然您没有显示返回值的内容。在这个例子中,它消失在以太中。

  

5)这些例子中的任何一个都被认为是“最佳实践”,还是有其他选择?

“Best”根据客观标准推断出与其他不太喜欢的事物相比较。如果没有这些标准(可能是某些标准:速度,稳健性,可维护性,支持或其他特征,可取与否),则无法确定。

如果您提出您想要使用其中一种情况的情况,可以根据建议的标准(或您可能拥有的其他方式)以及与替代方案进行比较,就是否有更好的方法提供建议。