对函数表达式和我分配函数表达式的变量使用相同的标识符是否存在任何问题

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

本文关键字:表达式 函数 是否 标识符 任何 问题 存在 分配 变量      更新时间:2023-09-26

例如:

var foo = function foo() {};

到目前为止,我还没有遇到任何问题,但我想知道为什么在了解到命名函数表达式优于匿名函数表达式后,我没有更频繁地看到这一点。

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

function foo() {
}
唯一的区别(

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

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

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

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


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