首页 新闻 会员 周边

关于JS的函数的疑问

0
悬赏园豆:5 [已解决问题] 解决于 2016-12-05 10:24
复制代码
window.onload = function(){
        function t1(){ 
        console.log("t1"); 
        } 
        t1(); 
        function t1(){ 
        console.log("new t1"); 
        } 
        t1(); 

        var t1=function(){ 
        console.log("new new t1"); 
        } 
        t1(); 
        function t1(){ 
        console.log("new new new t1"); 
        } 
        t1(); 
};
复制代码

为什么结果是:

new new new t1

new new new t1

new new t1

new new t1

刚开始接触js有点不明白,最后一个为什么是打印new new t1而不是new new new t1???

亦可追寻的主页 亦可追寻 | 初学一级 | 园豆:197
提问于:2016-12-02 13:49
< >
分享
最佳答案
1
window.onload = function(){
        function t1(){ 
        dwn("t1"); 
        }
        function t1(){ 
        console.log("new t1"); 
        }
        function t1(){ 
        console.log("new new new t1"); 
        }
        t1(); // new new new t1
        t1(); // new new new t1

        t1=function(){ 
        console.log("new new t1"); 
        } 
        t1(); // new new t1
        t1(); // new new t1
};

实际执行顺序应该是这样

收获园豆:5
by.Genesis | 老鸟四级 |园豆:2719 | 2016-12-02 14:09

继续问下为什么是这个执行顺序呢?不是太明白?谢谢了

亦可追寻 | 园豆:197 (初学一级) | 2016-12-05 08:30

@亦可追寻: 变量和函数声明会提升到作用域的顶部

看这里:

https://github.com/getify/You-Dont-Know-JS/blob/master/scope%20%26%20closures/ch4.md

by.Genesis | 园豆:2719 (老鸟四级) | 2016-12-05 10:00

@by.Genesis: 谢谢了。

亦可追寻 | 园豆:197 (初学一级) | 2016-12-05 10:22
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册