考虑两种样式的 javascript 函数声明(我认为是四种):
function foo() {
// ...
}
相对
var foo = function() {
// ...
}
在许多情况下,它们的行为是相同的,我认为我理解了主要区别,如这些 SO 问题中所解释的:
两者都有链接到这个非常有用的解释的答案:
但我想将这两种风格结合在一个声明中;一个简短/可缩小的局部变量名称(因为我需要经常引用它)和一个描述性名称(我想从中得到一些友好的东西.name
)。
这就是我感到困惑的地方。就好像立即将函数分配给变量的行为使其未定义在自己的名称下:
var f = function foo() {
// ...
};
console.log( f.name ); // "foo"
console.log( foo.name ); // !? error: foo is not defined ?!
所以要解决这个问题:为什么这不起作用?或者,更有可能的是,我对这两种声明风格还有什么误解?
请注意,以下内容不会导致错误:
var f = foo;
function foo() {
// ...
}
console.log( f.name ); // "foo"
console.log( foo.name ); // "foo"
这到底有什么不同?
PS:我认为这与这个 SO 问题不同:
在-javascript-what-is-the-motivation-or-advantage-of-using-var-foo-function-f...
这是关于我的困境的一个特例,其中变量名和函数名相同,即
var foo = function foo() {
// ...
};