JavaScript:提供与函数表达式相同的函数是否可以?

时间:2017-05-16 00:34:24

标签: javascript function function-expression

在JavaScript中,如果我创建一个函数表达式,如:

var foo = function foo() {
  return 'Hello world!';
}

这可以吗?会不会出现任何问题?或者我应该这样做:

var foo = function baz() {
  return 'Hello world!';
}

2 个答案:

答案 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

当您将函数命名为时,这是不可能的,因为外部变量将无法访问,被内部变量遮蔽。如果您想要这种情况,那么您需要以不同的方式命名它们。但是,我不会说在命名函数时有任何问题

编辑:除非你需要支持终结浏览器。然后要小心龙。