关于预解析的问题

关于预解析的问题

(function(){
console.log(fn);
	function fn(){
		return 1;
	}
})();

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

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 星
HTML5与CSS3实现动态网页 2018
  • 参与学习       1887    人
  • 提交作业       4643    份
  • 解答问题       5760    个

有HTML和CSS基础,却不知道如何进阶?本路径带你通过系统学习,完成从“会做网页”到“做出好的动态网页”的蜕变,迈出成为前端工程师的第一步。

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

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