我见过其他人使用以下模式。
var bar = function foo(){};
console.log(bar); // foo()
console.log(foo); // ReferenceError: foo is not defined
但是为什么呢?如果两者都被宣布,我可以理解这一点,但事实并非如此。这是为什么?
最佳答案
正如其他人所提到的,在示例中使用第一种形式(命名函数表达式)可以帮助调试,尽管随着浏览器中内置开发人员工具的最新改进,这个论点是变得越来越没有说服力。使用命名函数表达式的另一个原因是,您可以将函数名称用作函数体内的变量,而不是使用 ES5 中现已弃用的 arguments.callee
。
但是,命名函数表达式在 Internet Explorer < 9 中实现不正确且存在问题,当您针对这些浏览器时通常应避免使用命名函数表达式。请参阅Juriy Zaytsev's excellent article on the subject了解更多信息。
关于javascript - 为什么 JavaScript 函数声明(和表达式)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28454417/