在JavaScript中,如果我创建一个函数表达式,如:
var foo = function foo() {
return 'Hello world!';
}
这可以吗?会不会出现任何问题?或者我应该这样做:
var foo = function baz() {
return 'Hello world!';
}
答案 0 :(得分:3)
主要区别在于,在第一个示例中,当在函数内部时,foo
是一个阴影变量,并且不会引用全局foo
。例如:
var foo = function foo() {
foo = 1;
}
foo();
console.log(typeof(foo));
输出'function'
,因为我们只在函数内部重新定义了foo。
但是,如果您以第二种方式定义函数,foo
引用全局对象:
var foo = function baz() {
foo = 1;
}
foo();
console.log(typeof(foo));
由于我们修改了全局对象,因此输出'number'
。
答案 1 :(得分:2)
这取决于你想要什么。内部名称是函数的本地名称;外部名称位于外部作用域中,并由闭包捕获。因此,如果您以不同的方式命名函数,则可以从内部重新分配外部引用:
var foo = function baz() {
return foo;
};
var quux = foo;
foo = 17;
quux(); // => 17
当您将函数命名为时,这是不可能的,因为外部变量将无法访问,被内部变量遮蔽。如果您想要这种情况,那么您需要以不同的方式命名它们。但是,我不会说在命名函数时有任何问题。
编辑:除非你需要支持终结浏览器。然后要小心龙。