2011-04-18 13 views
1

我現在知道這個工程:在函數內部編寫javascript函數並且不在主函數中使用'new'是否好?

function outerfunction(arg1, arg2, arg3) { 
    var others; 
    //Some code 

    innerFunction(); 

    function innerFunction() { 
     //do some stuff 
     //I have access to the args and vars of the outerFunction also I can limit the scope of vars in the innerFunction..! 
    } 
    //Also 
    $.ajax({ 
      success : secondInnerFunction; 
     }); 

    function secondInnerFunction() { 
     // Has all the same benefits! 
    } 
} 

outerFunction(); 

所以,我不上outerFunction做一個「新」,但我把它作爲一個對象!這在語義上有多正確?

+0

感謝所有的答案,他們都是有價值的,我和幫助我理解這個概念很好,但系統不允許接受多個答案! :) – NikhilWanpal 2011-04-18 09:15:33

回答

1

似乎沒有要什麼不對,你在做什麼。 new用於構造一個用作構造函數的函數的新對象。如果沒有new,則不會創建對象;該函數只是執行並返回結果。

我假設你困惑的關閉,以及如何在函數退出後的功能和屬於功能範圍的其他變量保持活力。如果是這樣的話,我建議你看看jibbering JavaScript FAQ

0

您沒有使用外部函數作爲對象。您正在使用它來提供關閉。毫無疑問,邊界線很細,但在這種情況下,你遠離對象,因爲你沒有將任何類型的句柄傳遞給一些更通用的代碼調用方法,你所做的只是將一些變量的範圍限制爲需要能夠看到它們的代碼。

JFTR,實在沒必要​​給外部函數的名稱。只需調用它:

(function() { // just for variable scoping 
    var others; 
    ... 
})() 
0

我總是這樣做。是的 - JavaScript模糊了對象和函數之間的界限。或者,更準確地說,一個javascript函數只是一個可調用的對象。如果你想有多個函數實例,你只會真的使用'new'前綴。我唯一的建議是,在聲明它之後調用函數通常被認爲是很好的習慣(你在聲明之前調用了innerFunction) - 儘管這可能被認爲是挑剔。

0

這是一個有效的例子。在JavaScript

函數是一級對象。它們可以作爲參數傳遞,從函數返回,甚至設置爲變量。因此他們被稱爲'lambda'。

所以,當你直接使用此功能(無new關鍵字)你直接處理功能作爲一個對象。當你使用new關鍵字時,你正在處理函數的一個對象實例。