为了账号安全,请及时绑定邮箱和手机立即绑定

如果同一段代码在es5和es6输出不同结果,那么在运行时按哪个标准?

如果同一段代码在es5和es6输出不同结果,那么在运行时按哪个标准?

一青 2018-01-15 16:16:40
function f() { console.log('I am outside!';} (function () {     if(false) {         function f() { console.log('I am inside!';}     }     f(); }()); //es5会输出I am inside!,es6会输出I am outside! //那么用babel编译,最后在输出的时候是输出什么? //如果输出的是I am outside!,意思就是说当同一段代码出现歧义的时候,会默认采用es6吗?
查看完整描述

2 回答

已采纳
?
林逸舟丶

TA贡献124条经验 获得超28个赞

我跑了下你的代码,首先两个console没有凡括号,其次最末尾有一对括号,在被添加时会报错

//img1.sycdn.imooc.com//5a5d555400015c7505540213.jpg

去掉之后无报错,运行f()

输出outside

//img1.sycdn.imooc.com//5a5d55ae00012d8604670336.jpg

查看完整回答
1 反对 回复 2018-01-16
  • 一青
    一青
    谢谢回答,我想再请问一下在这里输出了outside是因为es5和es6有歧义的时候默认采用es6来编译吗?
  • 一青
    一青
    我已经知道了,再次感谢!
?
林逸舟丶

TA贡献124条经验 获得超28个赞

首先,应该回答你,目前是按照es5的标准。

其次if表达式为false,按照逻辑,f()是不该被重新定义输出inside的,这显然是一个逻辑bug

最后,用babel编译,其实是把es6的较新语法转换成了es5支持的语法,所以,按照当前场景,最后会输出什么,我觉得应该是I am inside!

查看完整回答
反对 回复 2018-01-16
  • 2 回答
  • 0 关注
  • 1212 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信