Javascript全局变量或对象变量

时间:2010-06-21 14:13:22

标签: javascript

我更喜欢为我的所有网站声明一个Javascript文件。我试图减少全局变量的使用。我在下面的例子中,每个对象都有一个myName字段。

  1. 我想知道它们何时被初始化?
  2. 就记忆力和效率而言哪一个更有效?
  3. 对于变量a,声明a.myName与全局“var myName = Rebecca”相同?
  4. var a = {
       myName : 'Rebecca' ,
    
       sayHello : function() {
          console.log(this.myName);
       }
    };
    
    var b = {
       myName : function() {
          return 'Rebecca';
       },
    
       sayHello : function() {
          console.log(this.myName());
       }
    };
    

    由于

4 个答案:

答案 0 :(得分:0)

首次遇到语句时,它们将被初始化。在a中,'Rebecca'被初始化为myName键的值。在b中,它只是myName(匿名)函数内部的数据。 a会稍微提高效率,因为它可以避免函数调用。在这个简单的例子中我也发现它更具可读性。

我发现选择将所有内容放在一个文件中是有问题的。在某些情况下,您需要模块化设计。既然你担心效率(尽管可能过早),请注意,如果页面包含他们不需要的代码,那么拥有一个大文件实际上会损害性能。

答案 1 :(得分:0)

1)除非在事件处理程序中声明对象,否则在浏览器中处理脚本时会初始化它们。在这种情况下,在执行事件脚本时会创建对象。

2)在效率方面,a可能会更有效率。请注意,在第一种情况下,您使用a.myName,在第二种b.myName()中获取该属性的值。

3)否。如果为对象的属性赋值,则始终必须通过对象获取该值。在这种情况下,a.myNamea['myName']

答案 2 :(得分:0)

  1. 我相信这些将被相同地初始化(即,当到达代码时)。不同之处在于,当它们被初始化时会发生什么,以及在实际需要数据时放置负载。

  2. 对我来说,这很大程度上取决于你期望在myName中得到的东西。如果它只是一个字符串,我会避免使用该函数并选择a。另一方面,如果涉及大量逻辑并且可能不需要调用逻辑(例如,如果它仅在用户单击按钮或应用程序达到某个状态时执行),我' d选择b。据我所知,该函数消耗内存并且不会收集垃圾(这是一个减号),但它也不会消耗CPU资源,直到实际需要它(这可能是一个巨大的优势)。

  3. 我不确定我是否理解这个问题,但我会说它不一样。如果a的唯一成员是myName,那么两者是等价的(两者都占据全局命名空间。但是如果你有多个属性,那么节省就会变得明显。从你的例子来看,我认为你很清楚理解这一点,所以我可能不理解这个问题。

答案 3 :(得分:-1)

a没有任何意义,因为您正在记录函数引用。 B是要走的路,因为你实际上正在调用方法,使用()。