对函数表达式和我将函数表达式分配给的 var 使用相同的标识符是否有任何问题?

Are there any problems with using the same identifer for both a function expression and the var I assign the function expression to?

例如:

var foo = function foo() {};

到目前为止我还没有遇到任何问题,但我想知道为什么在了解到命名函数表达式比匿名函数表达式更受青睐后,我却很少看到这种情况。

不,那绝对没问题。请注意,它几乎与

相同
function foo() {
}

唯一的区别(但这是一个重要的区别!)是我的示例(函数 声明)是 提升 而你的(命名函数表达式)不是。这也意味着我的不能出现在流量控制结构中(例如连接到 if 或循环的块)而你的可以。除此之外,他们做同样的事情:

  • 在引用函数的当前作用域中创建一个标识符foo

  • 创建一个函数,名称为(也是foo);该名称在函数范围内

如果没有您的 var foo =,命名函数表达式会执行后者而不是前者。


在一些过时的 JavaScript 引擎上,命名函数表达式处理不正确,但任何现代的东西(因此,不是 IE8)都可以正常工作。