关于预解析的问题

关于预解析的问题

1
2
3
4
5
6
(function(){
console.log(fn);
    function fn(){
        return 1;
    }
})();

我测试了如上代码输出函数体,add成功被预解析了;

1
2
3
4
5
6
console.log(fn);
for (var i=0;i<0;i++){
    function fn(){
        return 1;
    }
}

测试这段代码发现输出undefined,难道fn函数被当做var全局变量解析了吗?

想知道预解析的时候到底是如何定位关键字var或者function的呢?是逐个单词找吗?是以空格分割单词吗?

正在回答

登陆购买课程后可参与讨论,去登陆

2回答

代码在执行前会先被预解析,所有的全局变量会被拿在最前面,并为赋值为undefined。

fn是在for循环中,没有被预解析,只是有这个变量或函数,所以打印fn时,还没有加载到。

老师在课程中也说了,不建议在语句块中去声明函数或变量。

  • kasimg 提问者 #1
    谢谢老师的解答!
    2017-12-26 15:17:54
小丸子爱吃菜 2017-12-26 14:18:11

循环和条件分支语句中的变量和函数在某些浏览器是不会被预解析的,你将第二段代码的循环去掉,再测试下,就能找到函数了。

祝学习愉快!

  • 提问者 kasimg #1
    第二段代码里,如果fn没有预解析的话不是应该报错吗?但是实际上返回undefined了呢
    2017-12-26 14:34:22
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师
插入代码