0

因此,为了澄清这个问题,我了解 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)这些例子中的任何一个都被认为是“最佳实践”,还是有其他选择?

提前谢谢了!

4

1 回答 1

3

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

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

2)使用其中一个有好处吗?

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

3) 我已经看到代码(在第二个示例中)return myStuff.arbitraryValue 与 return myStuff().arbitraryValue 的工作方式相同。这怎么可能?

也许使用get,这是 JavaScript™</a> 的一个特性,但不是ECMAScript

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

是的,尽管您还没有展示如何处理返回值。在示例中,它消失在以太中。

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

“最佳”是指根据客观标准与其他不太受欢迎的事物进行比较。如果没有这些标准(可能是一些:速度、稳健性、可维护性、支持或其他特性,可取与否),则无法确定。

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

于 2014-05-14T03:21:50.220 回答