2017-08-04 320 views
3

拋出錯誤

var boo= function foo(){ 
 
    console.log("I am foo"); 
 
} 
 

 
boo(); // output: I am foo 
 
foo(); // output: Uncaught ReferenceError

我用JavaScript命名的功能有點困惑。任何人都可以解釋爲什麼在上面的代碼片段中,foo()函數調用會拋出錯誤。在此先感謝

+0

你是*命名函數'foo',但這並不意味着將爲它創建一個變量'foo'。 – deceze

+1

var boo = function(){ console.log(「I am foo」); }。你可以像這樣設置javascript命名功能。 – Sanil

+0

真的我沒有想到代碼工作它應該閱讀var boo = function(){...};該任務需要一個匿名函數。 – jidexl21

回答

1
var boo= function foo(){ 

函數和函數表達式之間有明顯的區別。

你有什麼是一個表達式解析爲一個變量。你期待的工作方式需要是一個函數或函數表達式解決的變量。

MDN docs

下面是一個匿名函數表達式的一個例子(該名稱是 未使用):

var myFunction = function() { 
    statements 
} 

另外,也可以,以便提供定義中的名稱 創建命名函數表達式:

var myFunction = function namedFunction(){ 
    statements 
} 

創建命名函數表達式的好處之一是,在 的情況下,我們列出了一個錯誤,堆棧跟蹤將包含該函數的名稱 ,從而更容易找到錯誤的來源。

正如我們所看到的,這兩個例子都不以function關鍵字開頭。涉及不以函數開頭的函數的語句是 函數表達式。