模块化es5 es6
const es5=require('fs')
运行时加载
import {f1} from './1.js'
编译时加载
模块化规范有CommonJS /AMD/CMD/UMD/Moudule
AMD模块定义通过define语句实现,通常在开发工程中,基于define语法定义的模块分为两类。
- 没用模块依赖的模块,其语法如下,回调函数的内容即为自定义的模块的内容。
- 定义有依赖的模块,其语法为如下
define([‘module1’,…,‘modulen’],function(param)]){
return
}
其中[1]参数1:数组形式的字符串,显示声明要注入若干依赖模块
[2]参数2:param-回调函数,在模块加载之后立即执行
各个模块加载的特点
-
CommonJS特点:
1.同步加载方式,适用于服务端,因为模块都放在服务端,对于服务端来说模块加载较快,不适合在浏览器环境中使用,因为同步意味着阻塞加载。
2.所有模块多次加载,但只会在第一次加载时运行一次,然后运行结果就被缓存了,以后再加载,就总结读取缓存结果。 -
AMD
采用异步方式加载模块,模块的加载不影响它后面语句的运行,所有依赖这个模块的语句,都定义再一个回调函数中,等到模块完成之后。这个回调函数才会运行,推崇依赖前置require.js目前AMD规范最热门的一个实现。
AMD也采用require语句加载模块,但是不同于CommonJS,它要求两个参数:require(module,callback);
require(['math'],function(math){
math.add(2,3)
});
CommonJS 模块输出的是一个值的拷贝,ES6 模块输出的是值的引用。
CommonJS 模块是运行时加载,ES6 模块是编译时输出接口。
CommonJS 模块的require()是同步加载模块,ES6 模块的import命令是异步加载,有一个独立的模块依赖的解析阶段。
函数的部分执行
function add(x+y){return x+y}
function add7(x){return x+7}=>
function add(x,y)=>x+y
const addOne=add(1,?)
const maxGreaterThanZero=Math.max(0,...)
特定
待定运算符?
占位运算符...
管道运算符
|>==f(x)