走过海棠暮 2022-05-04 05:19:33
说说我的理解哦
es6比es5多出来的部分分两类
一类是语法,如箭头函数,解构;
一类是新的类、新的类方法、新的实例方法,如:Promise, Array.from, Array.prototype.find
babel在做语法转换的时候,通过抽象语法树来实现代码层面的翻译。
比如将
const fn = () => {
Array.isArray([1, 2, 3]);
};
转成
"use strict";
var fn = function fn() {
Array.isArray([1, 2, 3]);
};
对于新的类、类方法,实例方法,基本就是polyfill,或者polyfill加上代码转换。
拿Array.from来说,只需要使用es5的语法,自己实现一遍Array.from,就可以用不改动源代码而使用Array.from这个es6的api了,@babel/polyfill这个包就是做这事儿的。
复杂点的Promise在babel转译的时候,不仅会调整源代码,还需要引入@babel/polyfill。有时候会遇到regeneratorRuntime is not defined这个报错,原因是源代码中Promise部分被转译了,转译后用到的regeneratorRuntime在@babel/polyfill中,但@babel/polyfill没被引入。
- 共 1 页
- 1
@sandGuard 感谢,这真是对我莫大的肯定~
JavaScript深入之作用域链