转换前:

const sum = (a,b)=>a+b

转化后:

// "use strict";
// var fn = function fn(a, b) {
// return a + b;
// };
 
 

实现:

从图片的对比我们可以看出最大的不同是在 init 时,函数的不同

init
Es6 : ArrowFunctionExpression
Es5: FunctionExpression
 
 
所以我们可以利用一个插件转化
 
let t = require('@babel/types');
 
 
具体:
  1. const babel = require('@babel/core');
  2. let code = `let fn = (a,b) => a + b`;
  3. let t = require('@babel/types');
  4. //1.init
  5. // Es6 : ArrowFunctionExpression
  6. // Es5: FunctionExpression
  7. /// t.functionExpression(id, params, body, generator, async)
  8. // id: Identifier (default: null)
  9. // params: Array<LVal> (required)
  10. // body: BlockStatement (required)
  11. // generator: boolean (default: false)
  12. // async: boolean (default: false)
  13. // returnType: TypeAnnotation | TSTypeAnnotation | Noop (default: null)
  14. // typeParameters: TypeParameterDeclaration | TSTypeParameterDeclaration | Noop (default: null)
  15.  
  16. //2. body
  17. //
  18. // ES5 BlockStatement
  19. // Es6 ExpressionStatement
  20. let transformArrowFunctions = {
  21. visitor: {
  22. ArrowFunctionExpression: (path, state) => {
  23. // console.log(path.node)
  24. // console.log(path.parent.id)
  25. let node = path.node;
  26. let id = path.parent.id;
  27. let params = node.params;
  28. let body=t.blockStatement([
  29. t.returnStatement(node.body)
  30. ]);
  31. //将ArrowFunctionExpression 转化为 FunctionExpression ,传入不要的参数
  32. let functionExpression = t.functionExpression(id,params,body,false,false);
  33. path.replaceWith(functionExpression);
  34. }
  35. }
  36. }
  37. const result = babel.transform(code, {
  38. plugins: [transformArrowFunctions]
  39. });
  40. console.log(result.code);
  41.  
  42. // let fn = function fn(a, b) {
  43. // return a + b;
  44. // };

输出:

  1. let fn = function fn(a, b) {
  2. return a + b;
  3. };

AST树可视化工具的网站:  https://astexplorer.net/

babel 转换箭头函数的更多相关文章

  1. let import export React入门实例教程 connect provider combineReducers 箭头函数 30分钟掌握ES6/ES2015核心内容 Rest babel

    let与var的区别 http://www.cnblogs.com/snandy/archive/2015/05/10/4485832.html es6 导入导出 http://www.csdn.ne ...

  2. 关于ES6的箭头函数的详解

    ok  坑比函数~~箭头函数~~不自己动手写看懂也不行~~~ 当然你也可以一点一点的把函数复制到Babel里面去将ES6转换成ES5  (斗笔行为) 老谢写的笔记教程就是深入(通俗易懂)哈哈~~~ 第 ...

  3. 箭头函数 Arrow Functions/////////////////////zzz

    箭头符号在JavaScript诞生时就已经存在,当初第一个JavaScript教程曾建议在HTML注释内包裹行内脚本,这样可以避免不支持JS的浏览器误将JS代码显示为文本.你会写这样的代码: < ...

  4. [译]ES6箭头函数和它的作用域

    原文来自我的前端博客: http://www.hacke2.cn/arrow-functions-and-their-scope/ 在ES6很多很棒的新特性中, 箭头函数 (或者大箭头函数)就是其中值 ...

  5. JavaScript 基础(七) 箭头函数 generator Date JSON

    ES6 标准新增了一种新的函数: Arrow Function(箭头函数). x => x *x 上面的箭头相当于: function (x){ return x*x; } 箭头函数相当于匿名函 ...

  6. 深入浅出ES6(七):箭头函数 Arrow Functions

    作者 Jason Orendorff  github主页  https://github.com/jorendorff 箭头符号在JavaScript诞生时就已经存在,当初第一个JavaScript教 ...

  7. ES6箭头函数和它的作用域

    原文来自我的前端博客: http://www.hacke2.cn/arrow-functions-and-their-scope/ http://es6rocks.com/2014/10/arrow- ...

  8. JS中的普通函数和箭头函数

    最近被问到了一个问题: >javaScript 中的箭头函数 (=>) 和普通函数 (function) 有什么区别? 我当时想的就是:这个问题很简单啊~(flag),然后做出了错误的回答 ...

  9. es6 箭头函数(arrow function) 学习笔记

    箭头函数有两个好处. 1.他们比传统函数表达式简洁. const arr = [1, 2, 3]; const squares = arr.map(x => x * x); // 传统函数表达式 ...

随机推荐

  1. 中国MOOC_零基础学Java语言_第4周 循环控制_2念整数

    2 念整数(5分) 题目内容: 你的程序要读入一个整数,范围是[-100000,100000].然后,用汉语拼音将这个整数的每一位输出出来. 如输入1234,则输出: yi er san si 注意, ...

  2. 第三方app抽奖发送微信红包实现

    1.控制器方法: private string SendRedPackge(string OpenId, int Amount, string LuckyCode) { Models.PayWeiXi ...

  3. 来自数据源的 String 类型的给定值不能转换为指定目标列的类型 nvarchar

    .TrimEnd() 怀疑是否SqlBulkCopy是否存在某种bug,故而在系统中改写代码,用单个sql的插入数据方式,用循环逐条导入.结果是没问题.难道真的是SqlBulkCopy有某种bug?上 ...

  4. python每日一练:0012题

    第 0012 题: 敏感词文本文件 filtered_words.txt,里面的内容 和 0011题一样,当用户输入敏感词语,则用 星号 * 替换,例如当用户输入「北京是个好城市」,则变成「**是个好 ...

  5. win10家庭版安装Docker (Docker Toolbox)

    开启CPU的虚拟化功能(自行百度)之前安装了VM所以这部跳过.具体查看可以打开任务管理器->性能->cpu 查看是否有 虚拟化:已启用字样 下载Docker Toolbox  下载地址 h ...

  6. vue--》如何使用wacth监听对象的属性变化?

    在开发过程中,我们经常需要监听watch监听一个对象的变化,但是如何来实现     监听对象中属性的变化呢? 先回顾一下如何监听整个对象的变化,使用watch就行了 export default { ...

  7. Redis的消息订阅及发布及事务机制

    Redis的消息订阅及发布及事务机制 订阅发布 SUBSCRIBE PUBLISH 订阅消息队列及发布消息. # 首先要打开redis-cli shell窗口 一个用于消息发布 一个用于消息订阅 # ...

  8. webpack e6转化成es5 配置方法

    方法一: https://www.babeljs.cn/setup#installation 按照babel官方的配置配 方法二: https://www.jianshu.com/p/ce28cedd ...

  9. ARM之cache

    一. 什么是cache 1.1. cache简介 a. Cache 即高速缓冲存储器,是位于 CPU 与内存之间的高速存储器,它的容量比内存小但交换速度快. b. ARM处理器的主频为上百M甚至几G, ...

  10. Luogu P5339 [TJOI2019]唱、跳、rap和篮球

    题目 设\(f_i\)表示从\((a-4i,b-4i,c-4i,d-4i)\)中选\(n-4i\)个排队的方案数. 那么我们可以容斥,答案为\(\sum\limits_{i=0}^{lim}(-1)^ ...