function 和var的区别

var fun=function(){}与function fun同样是定义一个fun两者有何区别呢?无论是效果还是使用都可以说一样的,但它们两却有异同的地方。我们来做一个小测试吧。

function fun(){
    alert(
0);
}
fun();
 
var fun = function(){
    alert(
1);
}
fun();
 
var fun = function(){
    alert(
2);
}
fun();
 
function fun(){
    alert(
3);
}
fun();

 

 

看了以上这代码后,可能大家的第一反应是,这一傻X代码也可以测试?肯定是0 1 2 3啦。
第一次看代码的时间,我的反应也是这样,真傻X,不过最后还是羞涩无比,结果跟自己第一时间的判断完全不同。
结果是3 1 2 2
细心点看了代码,这确实有不同寻常的地方。要知道js是块加载的,按这样的理解,结果肯定全是3,然而后面为什么会是1 2 2呢?
翻了翻书,发现了JS在块加载后,是需要解析的,解析完后才会运行。这里又关系到两个时期,一个是解析期,另一个是运行时。
这就是后面为什么是1 2 2的原因。因在解析期JS会先创建function fun定义量的对象,最后function fun会把前一个替换了,
所以在第一个是3. 当到了第二个时,用var定义的fun,JS引擎会先负上一个undefined,
接下来执行fun时才会创建对象把解析期创建的对象替换了,结果输出结果是1,同理第三个就把第二个给替换了,所以结果是2.
到了第四个,同于是用function fun定义的,在解析期已经创建了,不过现在到了运行时,现在的fun已是就第三个var fun定义的fun了,
所以第四个结果是2.
这东西真要命,世上还有这等事,。。。。。。。。。。。。。。。。

posted @ 2011-01-25 13:56  Max Gan  阅读(1409)  评论(1编辑  收藏  举报