初学es6有一些 babel 转换的疑问

本来在浏览器(Chrome 65)里直接运行会报ReferenceError错误,但是经过babel转换后,再运行,就会是undefined,这两种错误完全不一样,是说babel转换的不完全么?

clipboard.png

转换后

clipboard.png

阅读 2.5k
4 个回答

babel能力有限,不能使得转换后的ES5代码拥有块级作用域.所以这里的解决方案是把同名变量的换成名字不同的变量,从而起到同样的效果

转换后变量名都不一样了,一个是tmp,一个是_tmp。并且是var定义的,变量提升,打印_tmp就是undefined

因为它优先对let进行转换了(这就是为什么很多时候要对代码严谨(比如使用'use strict'),你不可以先赋值,再声明。),导致if区块内那个tmp其实是个新的变量,而且相对于es6报错,es5不会对不声明的东西报错,只会说它undefined

不好意思三位,刚刚贴错转换后的代码了...现在修正了

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题