JavaScript中Function Declaration与Function Expression
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
不是每个人都能有那么多的机遇的