为什么JavaScript函数声明(和表达式)?

我看到其他人使用以下模式.

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.

翻译自:https://stackoverflow.com/questions/9667148/why-javascript-function-declaration-and-expression

转载注明原文:为什么JavaScript函数声明(和表达式)?