2013-03-08 112 views
1

,所以我試圖找出不同的方式來聲明函數...什麼是低內存佔用的最好方法......VS調用函數

我一直在做的方式它是方法#4,我猜測是ATROCIOUS。我基本上做了一堆不同的「function XYZ(){ //stuff }」,並且一直在呼籲它執行這些操作...或多或少地作爲一種方法來管理所有代碼並將其組織起來......不是因爲性能,內存或任何與技術相關的原因。 ..任何人都可以請參與並解釋哪種方法最好? (或者如果你有自己的方法請發帖),爲什麼?

//method 1 
var sayHey = new Object(); 
    sayHey.derp = 'derp'; 
    sayHey.herp = function(){ 
     alert('herp'); 
    }; 

//side question: would this.derp = 'derp' be the same as sayHey.derp? if so, would it be better to use this rather than sayHey? 


//method 2 
var sayHey2 = function() { 
    return { 
     derp : 'derp', 
     herp : function(){ 
      alert('herp'); 
     } 
    } 
}(); 

//method 3 
var sayHey3 = { 
    derp: 'derp', 
    herp: function(){ 
     alert('herp'); 
    } 
}; 

//method 4 
var derp = 'derp'; 
function herp(){ 
    alert('herp'); 
} 
+0

*「...我一直在做的方法是方法#5 ...」*您的問題沒有方法5。 – 2013-03-08 19:13:25

+0

對不起...修正。我的意思是方法4 – 2013-03-08 19:15:41

+0

fyi ..在JavaScript中,所有*函數*都是**對象**。所以你可以創建對象,它可以具有屬性值作爲函數。 – sweetamylase 2013-03-08 19:18:21

回答

1
  • 方法1和3是相同的。創建對象的方式不盡相同。

  • 側問題:this.derp"derp"如果從物體照片直接調用的方法。換句話說,如果你做this.herp(),那麼this中的herp()函數將會是你的sayHey對象。

  • 方法2也是一樣的,只是有一個不必要的函數調用,沒有特別使用創建的變量作用域。您可以使derp爲函數內部的局部變量,而不是對象上的屬性,因此只能通過herp()方法訪問它。這爲變量提供了一些保護。

  • 方法4正在製作一個本地函數,所以你沒有直接獲取它的對象。每個用戶都有不同的用例。

+0

對不起,如果這不是正確的地方問,但... 對於方法2.我將如何利用變量範圍?通過使用「var x = 0」,並在返回後調用它? 和方法1/3,是否有很多變量,附加函數的「大」對象是不好的(我想這是變量作用域來的時候或者是不同的對象簇更好...(或者是擊敗了一般對象的目的) 非常感謝你 – 2013-03-08 19:29:49

+0

@HarrisonSeo:對於方法2,你將刪除'derp: 「derp」,'從被返回的對象中,'var derp =「derp」; * *返回的對象之上,但仍然在直接調用的函數中,然後在'herp()'方法中, 'alert(derp);',它會讀取這個變量,這是因爲函數創建了所謂的閉包,換句話說,它們永久地綁定到它們的詞法範圍,所以當函數與對象一起返回時,它仍然參考它的原始變量。 ...更多來... – 2013-03-08 19:34:01

+0

@ HarrisonSeo:WRT方法1/3,不,它不壞。這取決於你的特殊需求。對象是數據的集合,所以有時候有一個既有數據又有函數的對象是有意義的。如果您創建了幾個這些對象都具有相同的方法,那麼您可以使用原型繼承,這樣就不會一遍又一遍地創建相同的函數。 – 2013-03-08 19:35:41