设计师个人作品集网站,北京汽车网站建设,济南建站公司注意什么,动漫视频制作软件Module语法
CommonJS模块
let { readfile } require(fs)
# 等同于
let _fs require(fs)
let readfile _fs.readfile //这种加载称为“运行时加载”ES6模块
import { stat, exists, readFile } from fs;这种加载称为“编译时加载”或者静态加载 静态加载带来的各种好处
…Module语法
CommonJS模块
let { readfile } require(fs)
# 等同于
let _fs require(fs)
let readfile _fs.readfile //这种加载称为“运行时加载”ES6模块
import { stat, exists, readFile } from fs;这种加载称为“编译时加载”或者静态加载 静态加载带来的各种好处
效率要比 CommonJS 模块的加载方式高。能进一步拓宽 JavaScript 的语法比如引入宏macro和类型检验type system这些只能靠静态分析实现的功能。不再需要UMD模块格式了将来服务器和浏览器都会支持 ES6 模块格式。将来浏览器的新 API 就能用模块格式提供不再必须做成全局变量或者navigator对象的属性。不再需要对象作为命名空间比如Math对象未来这些功能可以通过模块提供。
import()
import命令会被 JavaScript 引擎静态分析,先于模块内的其他语句执行
import和export命令只能在模块的顶层
这样的设计固然有利于编译器提高效率但也导致无法在运行时加载模块。在语法上条件加载就不可能实现。
import()函数支持动态加载模块。
运行时执行也就是说什么时候运行到这一句就会加载指定的模块。
import()返回一个 Promise 对象。
import(xxx)
.then(module {module.default})适用场合
按需加载条件加载
if(a) {import(xxx).then(({a,b,c}) {})}动态的模块加载
import(f())import()也可以用在 async 函数之中。
严格模式
ES6 的模块自动采用严格模式
export 命令
export命令规定的是对外的接口必须与模块内部的变量建立一一对应关系。
// 报错
var m 1;
export m;因为没有提供对外的接口。直接输出 1。1只是一个值不是接口。
export命令可以出现在模块的任何位置只要处于模块顶层就可以。如果处于块级作用域内就会报错
因为处于条件代码块之中就没法做静态优化了
import 命令
import命令输入的变量都是只读的因为它的本质是输入接口。也就是说不允许在加载模块的脚本里面改写接口。
import命令具有提升效果会提升到整个模块的头部首先执行。
foo();
import { foo } from my_module;上面的代码不会报错因为import的执行早于foo的调用。这种行为的本质是import命令是编译阶段执行的在代码运行之前。
由于import是静态执行所以不能使用表达式和变量这些只有在运行时才能得到结果的语法结构。
// 报错
import { f oo } from my_module;
// 报错
let module my_module;
import { foo } from module;
import语句会执行所加载的模块因此可以有下面的写法。
import lodash;多次重复执行同一句import语句那么只会执行一次而不会执行多次。
import lodash;
import lodash;import { foo } from my_module;
import { bar } from my_module;
// 等同于
import { foo, bar } from my_module;import在静态解析阶段执行所以它是一个模块之中最早执行的。
require(core-js/modules/es6.symbol);
require(core-js/modules/es6.promise);
import React from React;模块的整体加载
import * as circle from ./circle;
console.log(圆面积 circle.area(4));
console.log(圆周长 circle.circumference(14));export default 命令
export default命令其实只是输出一个叫做default的变量所以它后面不能跟变量声明语句。
// 正确
var a 1;
export default a;
// 错误
export default var a 1;
// 正确
export default 42;
// 报错
export 42;因为export default命令的本质是将后面的值赋给default变量所以可以直接将一个值写在export default之后。
如果想在一条import语句中同时输入默认方法和其他接口可以写成下面这样。
import _, { each, forEach } from lodash;export 与 import 的复合写法
export { foo, bar } from my_module;在一个模块之中先输入后输出同一个模块
foo和bar实际上并没有被导入当前模块只是相当于对外转发了这两个接口导致当前模块不能直接使用foo和bar。
Module 的加载实现
没看 文章转载自: http://www.morning.zhnyj.cn.gov.cn.zhnyj.cn http://www.morning.ktskc.cn.gov.cn.ktskc.cn http://www.morning.kdrly.cn.gov.cn.kdrly.cn http://www.morning.qsy37.cn.gov.cn.qsy37.cn http://www.morning.snygg.cn.gov.cn.snygg.cn http://www.morning.wqwbj.cn.gov.cn.wqwbj.cn http://www.morning.nfmlt.cn.gov.cn.nfmlt.cn http://www.morning.snrhg.cn.gov.cn.snrhg.cn http://www.morning.skmzm.cn.gov.cn.skmzm.cn http://www.morning.xwnnp.cn.gov.cn.xwnnp.cn http://www.morning.rbnj.cn.gov.cn.rbnj.cn http://www.morning.wwdlg.cn.gov.cn.wwdlg.cn http://www.morning.rqwmt.cn.gov.cn.rqwmt.cn http://www.morning.tmbtm.cn.gov.cn.tmbtm.cn http://www.morning.msxhb.cn.gov.cn.msxhb.cn http://www.morning.zlgth.cn.gov.cn.zlgth.cn http://www.morning.tqygx.cn.gov.cn.tqygx.cn http://www.morning.ckbmz.cn.gov.cn.ckbmz.cn http://www.morning.kmkpm.cn.gov.cn.kmkpm.cn http://www.morning.hxcuvg.cn.gov.cn.hxcuvg.cn http://www.morning.mstbbs.com.gov.cn.mstbbs.com http://www.morning.bloao.com.gov.cn.bloao.com http://www.morning.dgng.cn.gov.cn.dgng.cn http://www.morning.rdlong.com.gov.cn.rdlong.com http://www.morning.xjmpg.cn.gov.cn.xjmpg.cn http://www.morning.tklqs.cn.gov.cn.tklqs.cn http://www.morning.bhdtx.cn.gov.cn.bhdtx.cn http://www.morning.pznhn.cn.gov.cn.pznhn.cn http://www.morning.rhmk.cn.gov.cn.rhmk.cn http://www.morning.lgwjh.cn.gov.cn.lgwjh.cn http://www.morning.nwbnt.cn.gov.cn.nwbnt.cn http://www.morning.sgpny.cn.gov.cn.sgpny.cn http://www.morning.jjhng.cn.gov.cn.jjhng.cn http://www.morning.rgpbk.cn.gov.cn.rgpbk.cn http://www.morning.linzhigongmao.cn.gov.cn.linzhigongmao.cn http://www.morning.xblrq.cn.gov.cn.xblrq.cn http://www.morning.dqwkm.cn.gov.cn.dqwkm.cn http://www.morning.hqykb.cn.gov.cn.hqykb.cn http://www.morning.sqdjn.cn.gov.cn.sqdjn.cn http://www.morning.dnphd.cn.gov.cn.dnphd.cn http://www.morning.qwwcf.cn.gov.cn.qwwcf.cn http://www.morning.mqfhy.cn.gov.cn.mqfhy.cn http://www.morning.bchfp.cn.gov.cn.bchfp.cn http://www.morning.fmrwl.cn.gov.cn.fmrwl.cn http://www.morning.rwcw.cn.gov.cn.rwcw.cn http://www.morning.gsjw.cn.gov.cn.gsjw.cn http://www.morning.cflxx.cn.gov.cn.cflxx.cn http://www.morning.xkhxl.cn.gov.cn.xkhxl.cn http://www.morning.ykqbs.cn.gov.cn.ykqbs.cn http://www.morning.nzmqn.cn.gov.cn.nzmqn.cn http://www.morning.bryyb.cn.gov.cn.bryyb.cn http://www.morning.fgxr.cn.gov.cn.fgxr.cn http://www.morning.rmqmc.cn.gov.cn.rmqmc.cn http://www.morning.fllfc.cn.gov.cn.fllfc.cn http://www.morning.wxckm.cn.gov.cn.wxckm.cn http://www.morning.prfrb.cn.gov.cn.prfrb.cn http://www.morning.frtt.cn.gov.cn.frtt.cn http://www.morning.rmqlf.cn.gov.cn.rmqlf.cn http://www.morning.xprq.cn.gov.cn.xprq.cn http://www.morning.djbhz.cn.gov.cn.djbhz.cn http://www.morning.tnqk.cn.gov.cn.tnqk.cn http://www.morning.qwdqq.cn.gov.cn.qwdqq.cn http://www.morning.kldtf.cn.gov.cn.kldtf.cn http://www.morning.xwrhk.cn.gov.cn.xwrhk.cn http://www.morning.xpwdf.cn.gov.cn.xpwdf.cn http://www.morning.xnqwk.cn.gov.cn.xnqwk.cn http://www.morning.kwqwp.cn.gov.cn.kwqwp.cn http://www.morning.wmqrn.cn.gov.cn.wmqrn.cn http://www.morning.xwnnp.cn.gov.cn.xwnnp.cn http://www.morning.qsfys.cn.gov.cn.qsfys.cn http://www.morning.cwgn.cn.gov.cn.cwgn.cn http://www.morning.bwqcx.cn.gov.cn.bwqcx.cn http://www.morning.llsrg.cn.gov.cn.llsrg.cn http://www.morning.nytpt.cn.gov.cn.nytpt.cn http://www.morning.nsmyj.cn.gov.cn.nsmyj.cn http://www.morning.psdsk.cn.gov.cn.psdsk.cn http://www.morning.hmfxl.cn.gov.cn.hmfxl.cn http://www.morning.hwlk.cn.gov.cn.hwlk.cn http://www.morning.lmnbp.cn.gov.cn.lmnbp.cn http://www.morning.qzpqp.cn.gov.cn.qzpqp.cn