这些之间有什么区别?
var myFunc = function() {
// ...
};
VS
var myFunc = function myFunc() {
// ...
};
在第二个示例中,arguments.callee.caller.name
有效,但不在第一个中。第二种语法有什么问题吗?
答案 0 :(得分:7)
第二个有名字,而第一个没有。函数是具有属性name
的对象。如果该函数是匿名的,则它没有名称。
var a = function(){}; // anonymous function expression
a.name; //= empty
var a = function foo(){}; // named function expression
a.name; //= foo
答案 1 :(得分:2)
函数文字中的name
是可选的,如果省略,则在第一种情况下显示该函数被称为匿名。
这是JavaScript: The Good Parts by Douglas Crockford:
函数文字有四个部分。第一部分是保留字功能。可选的第二部分是函数的名称。该函数可以使用其名称递归调用自身。调试器和开发工具也可以使用该名称来标识该功能。如果函数没有给出名称,如上例所示,则称其为匿名。
答案 2 :(得分:1)
第一个功能没有名称。
为变量赋值不会为函数命名。