ES6、Babel

简介: 这篇文章我们主要讲两个方面的知识: 1、讲解ES6里面比较难理解的,但面试经常会问到的相关知识。 2、讲解Babel的原理以及如何使用Babel。

一、Promise、Generator、async-await

   ES6说白了就是一套标准,没有大家想的那么高大上。学习这套标准已经是趋势了,所以建议大家多深入学习。

ES6很多篇文章都有讲解,这里我们只对Promise/Generator/async-await进行分析讲解。讲解完后,大家要在平时开发多点使用,加强记忆。


   1. Promise

   Promise通俗易懂来说,它就是相当于一个容器,接受两个函数(分别是:reslove/reject)作为参数。成功就执行reslove、失败就执行reject。最后这两个函数都返回同一个promise对象,基于这点,所以我们可以使用链式调用(代码更加简洁易懂)。


下面举个例子来加强印象:(两个写法都可以的,建议使用第二种)

   方式一:

//Demo
function testPromise ('test.txt') {
  // 返回一个promise对象
  return new Promise((resolve, reject) => {
    fs.readFile(path,"utf8", function (error, data) {
      if (error)
        reject(error);
      else
        resolve(data);
    })
  })
}

 

 方式二:

//Demo
testPromise('test.txt')
.then( data => {
  // 成功回调
  console.log(data)
})
.catch( error =>{
  // 抛出异常,
  console.log(error)
})

 

  2. Generator

   generator是ES6用来解决异步编程的一个方案,它是一个生成器函数。有一个作用可以让我们的异步操作暂停。通常跟yield一起出现使用的。生成器函数有一个特征,function关键字与函数之间有一个 *


下面举个例子让大家知道generator的用法:

  我们结合yield一起使用

//Demo
function *Add(a, b) {
  let sum = a + b
  yield console.log(sum)
  let sub = a - b
  yield console.log(sub)
}
let count= Add(2, 7)
count.next()
// 输出
/* 9 */


通过上面的这个简单的例子,我们可以看到当代码运行到yield的时候,异步就会暂停。当执行next()这个方式,异步就会继续运行。(简单理解就是:每遇到一个yield就会暂停,next()就继续,以此类推)

使用生成器函数有个好处,可以让我们的代码一直保持同步语法。


   3、async-await

  ES7出了async-await,使得我们的代码更加简洁,而且还不需要引入第三方库。使用成本很低的。下面我们就开始讲解async-await。


下面举个简单的例子让大家理解如何使用async-await:

//Demo
function Test1 () {
  return '前端'
}
async function Test2 () {
  return '大神之路'
}
async function Result () {
  //等待一个字符串
  var r1 = await Test1 ()
  // 等待一个promise对象,await的返回值是promise对象resolve的值,也就是'大神之路'
  var r2 = await Test2 ()
  console.log(r1 + r2)
}
Result()
// 得到的结果是'前端 大神之路'


代码分析:

   await会让async函数暂时停止执行,等到await后面的表达式处理完成后,async就会继续执行了。(await后面的表达式没有限制的)

async-await本质不是同步,只是让我们可以使用同步的逻辑去思考代码。


看到这里,对上面讲解的应该都理解了,我们在平时开发中,多点使用,正所谓活学活用,就是这个道理。


二、Babel

   Babel说白了就是一个js编译器,可以把ES6的代码转成浏览器支持的ES5。有了Babel我们使用ES6就没有后顾之忧了。

   目前主流的框架基本都把Babel封装使用了,不再需要我们自己一步一步去安装了,开箱即用。但是我们还是应该了解一下的:


   下面讲讲,如何搭建Babel:

1、本地安装 Babel CLI:

npm install --save-dev babel-cli


安装完成后应该再package.json的devDependencies看到类似下面的(版本不一定是这个)

"babel-cli": "^6.0.0"


2、使用:

在package.json"scripts" 属性并将 babel 命令放在它的 build 属性中

"scripts": {
  "build": "babel src -d lib"
},


接下来我们就可以使用期待已久的npm run build了。

最后要让babel生效,还需要创建 .babelrc 文件、引入一些插件(例如preset


安装插件

npm install babel-preset-env --save-dev

定义.babelrc文件,让preset生效

{
  "presets": ["env"]
}


来个例子让大家知道babel做了什么:

// 转码前
_filter (add, name, code) {
  let result = []
  for (let i = 0; i < add.length; i++) {
    if (code == add[i].RNUM) {
      result = add[i][name]
    }
  }
  return result
}
// 转码后
_filter: function (e, t, n) {
  for(var i=[],a=0; a<e.length; a++)
  n == e[a].RNUM && (i = e[a][t]);
  return i
}

讲到这里相信大家对Babel也有了大概的概念了,如果要深入学习Babel可以到官方文档进行深入学习。

相关文章
|
JavaScript 前端开发 编译器
分享:Babel7的配置
分享:Babel7的配置
300 0
|
JavaScript
Vue报错:This dependency was not found: vuex in ./node_modules/babel-loader/lib
Vue报错:This dependency was not found: vuex in ./node_modules/babel-loader/lib
1209 0
Vue报错:This dependency was not found: vuex in ./node_modules/babel-loader/lib
|
8月前
|
JavaScript 前端开发 API
你好,babel
你好,babel
|
9月前
|
编解码 JSON JavaScript
babel的学习
babel的学习
55 0
|
9月前
|
缓存 JavaScript 前端开发
JavaScript模块化:CommonJS与ES Modules的对比与使用
【4月更文挑战第22天】本文探讨了JavaScript模块化的两种规范——CommonJS和ES Modules。CommonJS适用于Node.js,通过`require`同步加载模块,而ES Modules(ES6模块)用于前端,支持异步加载和静态导入导出。CommonJS有缓存,ES Modules无缓存。在选择时,Node.js环境常用CommonJS,但趋势正转向ES Modules,前端项目推荐使用ES Modules以利用其优化性能的优势。
|
JavaScript 前端开发 编译器
什么是 Babel?
什么是 Babel?
182 0
什么是 Babel?
|
JavaScript
es6 Module和commonjs的区别
es6 Module和commonjs的区别
|
缓存 JavaScript 开发者
CommonJs和es6的Module的区别
CommonJs和es6的Module的区别
|
JavaScript 前端开发
nodejs ES6模块使用 以及 ES6代码转CJS兼容性处理
nodejs ES6模块使用 以及 ES6代码转CJS兼容性处理
nodejs ES6模块使用 以及 ES6代码转CJS兼容性处理
ADI
|
编解码 自然语言处理 前端开发
[分享] Babel-ES6转ES5
[分享] Babel-ES6转ES5
ADI
209 0