2013-01-22 170 views
-1

可能重複:
JavaScript: var functionName = function() {} vs function functionName() {}
What is the difference between a function expression vs declaration in Javascript?函數的聲明

什麼是聲明JavaScript函數的正確方法?

從codeacademy.com走到這個地步:

var someFunction = function(paramA, paramB){ 
    // do some function here 
} 

但是因爲我的編程基礎是PHP,我更喜歡用這種方式聲明功能:

function someFunction(paramA, paramB){ 
    // do some function 
} 

什麼,我關心的是哪一種是推薦的函數聲明方式,恐怕如果我喜歡的方式有一些後果,但我非常喜歡這種方式,因爲這使得我的NetBeans代碼導航器可以讀取我所有的函數。

Netbeans Code Navigator

+1

從技術上講,只有第二個是聲明。查看Diodeus建議的副本。 – bfavaretto

回答

2

兩者都是可以接受的。事實上,你也可以這樣做:

foo = function bar() { 
      console.log(arguments.callee.name); 
}; 

如果你再調用foo(),你會看到在控制檯"bar"

第一種方法創建一個匿名函數並將其分配給一個變量。

第二種方法創建一個命名函數並將其放置在當前範圍內。

第三種方法創建一個命名函數並將其分配給一個變量。但是,這次名稱只存在於該函數的範圍內。

使用名稱聲明函數(function name() {})的優點是,您可以從內部更容易地調用該函數,這可能是實現遞歸算法所必需的。如果你不這樣做,你必須使用arguments.callee.name來調用它自己的函數,但是在MDN中被警告。

所有這一切都是一種冗長的說法,或者是可以接受的,如果有疑問,使用命名函數不會出錯。