5

可能重复:
var fn = function() {…} 和 var fn = function foo() {…} 有什么不同吗?

从这里

JavaScript中的函数表达式与声明有什么区别?

我了解声明函数和将它们声明为变量之间存在差异。

但尚不清楚以下之间是否有任何区别:

var func_name = function(param, param1){...};

和:

var func_name = function func_name(param, param1){...};

它们完全一样吗?

4

4 回答 4

3

在 JavaScript 中有两种声明函数的方法。

函数声明

函数声明是语句,因此它们以 function 关键字开头,您必须为函数命名。

这些也在代码执行开始之前被解析,所以下面的代码不会抛出错误:

foo(); // "foo" exists because it was created at parse time
function foo() {
}

函数表达式

函数表达式——顾名思义——表达式。表达式中的函数被视为任何其他值(例如数字、字符串等),它们的命名完全是可选的。

表达式中的函数是在运行时创建的,所以下面的代码 抛出一个期望:

foo(); // "foo" does not exist yes because it will not be created until the line below is executed
var foo = function() {
}

函数名称

函数名称主要有两个好处。

  1. 调用函数声明
  2. 从函数内部访问函数对象

如前所述,在表达式的情况下,名称可以省略;因此,创建一个所谓的匿名函数

因此,在您的示例中,您有两个函数表达式,其中一个是匿名函数,另一个不是。

另见:http ://bonsaiden.github.com/JavaScript-Garden/#function.general

于 2012-10-21T17:19:11.627 回答
1

答案是不”。

您始终可以在函数内部通过其名称调用该函数。

var func_name = function other_0func_name(param, param1){
..... ;
other_func_name()};
于 2012-10-21T17:19:13.913 回答
0

我很确定这只是为了使调试更容易。

似乎命名函数可以带来更愉快的调试体验。在调试应用程序时,具有描述性项目的调用堆栈会产生巨大的影响。

于 2012-10-21T17:17:34.477 回答
0
var func_name = function(param, param1){...};

将创建一个匿名函数并分配给变量“func_name”

var func_name = function func_name(param, param1){...};

将创建一个名为“func_name”的函数,然后将该函数分配给变量“func_name”

如果您在控制台中测试这两行,您将看到

var func_name = function(param, param1){};
console.log(func_name)

会给

function (param, param1){}

然而

var func_name = function func_name(param, param1){};
console.log(func_name)

会给

function func_name(param, param1){}

使用方面没有区别,因此出于您的目的,它们是相同的。希望这可以清除它。

于 2012-10-21T17:27:51.010 回答