现在的位置: 首页 > web前端 > 正文

es6 Module语法

2020年07月09日 web前端 ⁄ 共 889字 ⁄ 字号 评论关闭

  CommonJS加载的是一个对象(module.export),该对象只有在脚本运行完成之后才会生成,ES6不是对象,它对外的接口是一种静态定义,在代码静态解析阶段就会生成。


  es6模块化module和CommonJS和AMD模块(运行时加载)的区别


  1、运行时加载


  //CommonJS模块


  let{stat,exists,readFile}=require('fs');


  //等同于


  let_fs=require('fs');


  letstat=_fs.stat;


  letexists=_fs.exists;


  letreadfile=_fs.readfile;


  上面代码的实质是整体加载fs模块(即加载fs的所有方法),生成一个对象(_fs),然后再从这个对象上面读取3个方法。这种加载称为“运行时加载”,因为只有运行时才能得到这个对象,导致完全没办法在编译时做“静态优化”。


  2、ES6可以在编译时就完成模块加载


  1


  2


  //ES6模块


  import{stat,exists,readFile}from'fs';


  上面代码的实质是从fs模块加载3个方法,其他方法不加载。这种加载称为“编译时加载”或者静态加载,即ES6可以在编译时就完成模块加载,效率要比CommonJS模块的加载方式高。当然,这也导致了没法引用ES6模块本身,因为它不是对象。


  ES6模块module的好处


  1、由于ES6模块是编译时加载,使得静态分析成为可能。有了它,就能进一步拓宽JavaScript的语法,比如引入宏(macro)和类型检验(typesystem)这些只能靠静态分析实现的功能。


  2、不再需要UMD模块格式了,将来服务器和浏览器都会支持ES6模块格式。目前,通过各种工具库,其实已经做到了这一点。


  3、将来浏览器的新API就能用模块格式提供,不再必须做成全局变量或者navigator对象的属性。


  4、不再需要对象作为命名空间(比如Math对象),未来这些功能可以通过模块提供


  总之,module给大家简单的介绍了一些,希望大家多看看。

抱歉!评论已关闭.