可能重复:
JavaScript: var functionName = function() {} vs function functionName() {}
假设我们在函数内而不在全局命名空间中。
function someGlobalFunction() {
var utilFunction1 = function() {
}
function utilFunction2 () {
}
utilFunction1();
utilFunction2();
}
这些是同义词吗?当someGlobalFunction
返回时,这些功能是否完全不存在?我是否因为可读性或其他原因而更喜欢其中一种?
答案 0 :(得分:47)
他们大多数相同。
utilFunction1
仅在声明后才可用。 utilFunction2
被提升到函数的顶部,因此可以在定义之前使用。
function someGlobalFunction() {
utilFunction1(); // Error: untilFunction1 is undefined :(
utilFunction2(); // Works
var utilFunction1 = function() {
}
function utilFunction2 () {
}
}
除非它们被困在一个闭包中,否则someGlobalFunction
返回时两者都将不复存在。
我更喜欢使用用于声明utilFunction2
的方法,但这取决于您。
utilFunction2
形式的声明(称为函数声明)具有在 your-favorite-debugger <中命名(即显示为utilFunction2
)的好处sup> TM ,其中utilFunction1
(称为函数表达式)只会显示为匿名函数。
为完整起见,您还有表格;
var utilFunction3 = function utilFunction4() {
// blah
};
...它被称为命名的函数表达式,它有自己的weird properties(和bugs(在旧版本的IE中))。
答案 1 :(得分:9)
是的,它们完全不同:
例如:
if (true) {
function utilFunction() {
return true;
}
} else {
function utilFunction() {
return false;
}
}
utilFunction(); // returns false in IE, true everywhere else
IE将函数范围问题发挥到极致,有效地评估函数,即使它们没有代码路径!
答案 2 :(得分:8)