A:
have_it();
function have_it(){
alert("alert");
}
B:
have_it();
var have_it = function{
alert("alert2");
}
造成以上2种不同提示的原因是:JavaScript是一种解释型语言,函数声明会在JavaScript代码加载后、执行前被解释,而函数表达式只有在执行到这一行代码时才会被解释。而代码B在执行have_it()还未存在Function object和变量have_it,因为JavaScript在第一次使用某变量时会建立此变量,所以此处建立变量have_it,但其值时 undefined,未引用任何对象,将其作为函数来调用当然会出错。
除了什么时候可以被访问到外,JavaScript中的Function Declaration与Function Expression两种语法其实是等价的。另外,大多数浏览器支持将两种语法一起使用,如:
//除Safari外正确
var func = function func(){
}
但是以上语法在Safari上会报错。因此为了浏览器兼容性考虑,任何时候都不要合并使用两种语法。
截取段意自http://www.cnblogs.com/leoo2sk/archive/2011/01/16/function-declaration-and-expression.html