关于var语句var varName = function funcName() {}

var varName = function funcName() {}

本问题已经有最佳答案,请猛点这里访问。

两者有什么区别

1
var a = function() {}

1
var a = function b() {}

后者,b是未定义的?


第一个是匿名函数表达式,第二个是命名函数表达式,两者都在javascript中有效。

例如,它可以用于没有arguments.callee的递归(已弃用,在严格模式下不允许),因为它引用自身,无论在哪里。引用的范围仅限于函数内部,也就是说,它不能全局访问:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
var a = function b(){
    return b;
 };
function c() {
    return c;
}
var d = function e() {
    return e();
};
d(); // maximum call stack size exceeded :P
var f = c;
c = null;
f(); // null
a(); // function
b();// undefined not a function
b; // not defined
a()(); // same function again


第二个是一个命名的匿名函数-该名称将出现在stacktrace中(否则在stacktrace中,您将只看到"匿名函数")。


1
var a = function() {}

函数名可以省略。在这种情况下,函数名被省略。这些函数称为匿名函数。

有关详细信息,请阅读有关JavaScript作用域和匿名函数优缺点的信息。