在javascript中这种函数赋值给变量有用吗?

bra*_*orm 0 javascript function object

我正在读这本书.Javascript,道格拉斯·克罗克福德的优秀作品.书中提供了一些例子,但我无法理解这些例子在实践中的用处和方式.为简单起见,我在这里修改了代码.这里有两种方法,我可以对变量进行函数赋值.

例1:

var test= function(ex) {
    alert(ex);
};
test(5);
Run Code Online (Sandbox Code Playgroud)

这会生成值为5的警报框

例2:

var test1 = function test2(ex) {
    alert(ex);
};
test1(7); //this produces alert box with value of 7
test2(8)//this does not give a alert box
Run Code Online (Sandbox Code Playgroud)

我已经定义了函数test2但是将它分配给了test1.为什么我不能通过调用test2(8)直接访问test2.此外,我没有看到示例2中的任何大优势超过示例1.如果您有一些差异,其中一个是优越的,我想听到.

谢谢

hol*_*ple 6

var test1 = function test2(ex) {
    console.log(test2);
};
Run Code Online (Sandbox Code Playgroud)

命名函数使其能够从其体内引用自身.

test2test2对其子范围(函数)可见,如果有的话.


elc*_*nrs 5

你基本上test1是在为一个名为"命名函数表达式" 的函数赋值.调试代码很有用,因为函数的名称将显示在调用堆栈跟踪中而不是"匿名函数"中.

JavaScript中的函数也是对象,因此函数的标识符是test1(函数对象),但函数本身的名称是test2,所以test1.name == 'test2'