2011-10-16 65 views
6

只是一個快速的...正確的方式來格式化JavaScript函數

什麼是格式化JavaScript函數的正確方法?

我認爲是這樣的:

function doThis(){ 
} 

像這樣:

doThis = function(){ 
} 

或者,也許它沒有什麼區別。請讓我知道什麼是最好的,或者如果他們有不同的rasons或目的。

乾杯

Ç

回答

10

它們是兩個不同的東西,儘管它們都創建了一個函數(並將其分配給一個變量)。

function name() { 
} 

是一個函數語句(或 「函數聲明」)。只有法律顯示爲頂級腳本元素或直接作爲函數的元素:即,它是一個函數語句出現的if不合法,或while等所有功能語句「解除」的函數(或腳本)的頂部,從而以下是有效的:

a() 
function a() { alert("a") } 

在形式:

variable = function name() {} // or variable = function() {} 

功能關鍵字是一個功能 - 表達上下文:它創建一個新的函數對象,並將生成的函數對象(只是一個「正常值」)分配給variable。以下是無效的,因爲功能表達式是而不是解除。

var b 
b() // oops, does not evaluate to a function-object yet! 
b = function b() { alert("b") } 

之所以這麼說,「正確的方式」是使用函數語句(「函數聲明」)的形式,除非有理由不這樣做。

快樂編碼。


參見:

+0

真棒@pst。現在非常有意義。謝謝 – Cybercampbell

2

有那些語法之間一個重要的,也是有用的差異。

封裝

在OOP它是非常有用的使用封裝,其是用於限制接入到其他對象的機制。公共和私人增值經銷商之間的區別/在JavaScript功能可以說是這樣的:

function Color(value) 
{ 
    // public variable 
    this.value = value; // get from arguments 

    // private variable 
    var _name = "test"; 

    // public function 
    this.getRandomColor = function() 
    { 
    return Math.random() * 0xFFFFFF; 
    } 

    // private function 
    function getNiceColor() 
    { 
    return 0xffcc00; 
    } 
} 

測試公共

的顏色實例內的公共變量和函數都可以訪問:

// create instance of Color 
var color = new Color(0xFF0000); 
alert(color.value); // returns red color 
alert(color.getRandomColor()); // returns random color 

測試私處

私有變量和函數不能從顏色實例訪問:

var color = new Color(0x0000FF); 
alert(color.getNiceColor()); // error in console; property does not exist, because function is private. 
alert(color._name); // error in console; property does not exist, because variable is private. 

注意
它可以更好地利用公共職能時要使用好老原型,因爲編碼的這種方法可能會導致的傳承問題。