2013-01-10 15 views
0

我想知道什麼是隱藏在某些具體的方式來執行一些代碼。我們應該使用哪種方法來執行和處理一些代碼,爲什麼?

我有3種不同的方式來做我的想法,但我真的不知道哪種情況更好,爲什麼更好。 我只是在大多數情況下選擇Case 2方法來進行語法偏好,但我越來越想知道每種方法的優點和缺點。

案例1:

var response = Func(); 
//Handle response... 

案例2:

Func(response){ 
    //Handle response... 
}; 

案例3:

Func({ 
    case_x: function(opt){ 
    //Handle an example case... 
    } 
}); 

感謝我對此感到很好奇的解釋!

+2

這是一個有點廣泛,你可以使它更具體,更少的列表所有的問題? –

+0

我認爲這只是歸結爲co ding的風格,但生病讓別人解釋它;-) – Stokedout

+0

假設'Func'是一個函數,你的案例#2語法無效(或至少做一個非常不同的事情) – Bergi

回答

0

假設func被現有的功能:

案例1,如果你的函數返回一個值,你要存儲的結果,如:

function times_ten(num){ return num*10; } 
var ten = 10; 
var hundred = times_ten(ten); 

所以,現在你可以使用從現在開始變量hundred

案例2,如果你不返回一個值,或者你並不需要保存:

function write_times_ten(num){ num = num*10; document.write(num); } 
var ten = 10; 
var hundred = write_times_ten(ten); 

案例3要稍微複雜一點。

如果你這樣做var something={a:function(){}} - 通過創建一個像這樣的對象,你的所有函數都在同一個範圍內,所以你不會污染全局命名空間。這有點像在其他語言中創建一個類。 jQuery是這個我能想到的最大的例子,因爲它所做的全部都是由對象jQuery處理的(或者調用一個函數,如jQuery.parseJSON(json_string)

如果你傳遞一個對象這樣的功能,那麼你問Func()做與功能的東西,你通過了,像這樣:

function do_something_times_ten(options){ 
    options.num = options.num*10; 
    options.do_something(num); 
} 
var ten = 10; 
do_something_times_ten({num:ten, 
         do_something:function(num){ 
                num = num*10; 
                document.write(num); 
                } 
         } 
); 

現在就寫出來1000,而不是100。

+0

感謝您的答案,但我的問題是關於這些方法的性能,我已經知道如何使用它。我在想,如果一個人更快或者不快,如果他們都是異步的,這種事情。 不拉扯全局名稱空間的事實是否有一些重新執行? – Ludo

+0

如果我們不污染全局命名空間,我們在範圍中創建的所有東西都會在執行後被銷燬,所以我們的應用通過這樣做是「更輕」的嗎? – Ludo

+1

不,如果你有它的範圍,你只能通過對象訪問方法 - 即你可以做jQuery。parseJSON(json_text)但不parseJSON(json_text) - 這是一個很好的解釋爲什麼污染是不好的,特別是在更大的項目中:http://stackoverflow.com/questions/8862665/what-does-it-mean-global-namespace - 將被污染 – Max

相關問題