老师既然预解析声明了if里面的函数,那么前面两个为什么打印不出来。
console.log(fn);
console.log(add);
if (true) {
function fn(){
return console.log('jfosjdfo')
}
}else{
function add(){
return console.log('nihao ')
}
}
console.log(fn);
正在回答 回答被采纳积分+1
同学你好,确实如你所说,在前面调用没有报错,也进行预解析了。这里老师说的是有问题的,很抱歉,老师重新跟你解释一下:
(讲解的知识涉及es6,最后一个阶段才会学到,暂时对以下内容了解一下即可,等学习了es6再来复习)
课程中老师讲的是对的,视频中强调了一下在没有块级作用域的时候,if判断中的函数会在全局预解析。因为大部分高版本浏览器已经开始支持es6语法规则了,所以这里的if判断按照会当成块级作用域,在es6语法中,如果在块级作用域中声明的函数,会有以下情况:
函数声明类似于var,即会提升到全局作用域或函数作用域的头部。所以这里声明的两个函数,在全局下会预解析,只不过与声明变量类似,相当于声明了变量没有赋值,所以输出为undefined。
同时,函数声明还会提升到所在的块级作用域的最前,所以在if中是可以输出函数的。
另外,同学可以使用低版本ie测试一下,是可以输出两个函数的。因为低版本不兼容es6,所以就像课程中老师说的,在没有块级作用域时,if中的两个函数在全局下预解析。
如果我的回答帮助到了你,欢迎采纳,祝学习愉快~
相似问题
登录后可查看更多问答,登录/注册
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星