2017-08-04 271 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关键字开头。涉及不以函数开头的函数的语句是 函数表达式。