AMD、CMD、require、import的区别

AMD 推崇依赖前置

CMD 推崇就近依赖

什么意思呢?就是AMD在定义模块的时候要先声明其依赖的模块。例如这样:

define(['jquery'],function($){
    var  backButton = $('.backToTop');
	return {
    	backButton
	};
});

CMD没有这里严格的要求,它只要依赖的模块在附近就可以了,例如下面这样:

define(function(require, exports, module) {
	var a = require('./a') // 依赖可以就近
	a.data()
	var b = require('./b') 
	b.data()
})

AMD和CMD最大的区别是对依赖模块的执行时机处理不同,注意不是加载的时机或者方式不同。

有些人说requireJS是异步加载模块,SeaJS是同步加载模块,这么理解实际上是不准确的,其实加载模块都是异步的,只不过AMD依赖前置,js可以方便知道依赖模块是谁,立即加载,而CMD就近依赖,需要使用把模块变为字符串解析一遍才知道依赖了那些模块,这也是很多人诟病CMD的一点,牺牲性能来带来开发的便利性,实际上解析模块用的时间短到可以忽略、

es6中import、require引用的区别

require的使用非常简单,module.exports后面的内容是什么,require的结果就是什么,对象、数字、字符串、函数……再把require的结果赋值给某个变量。

理论上require是可以放在任何地方,比如:

require('./test')()
require('./test').list

import是编译的(require是实时运行),必须放在文件的头部,这和其他所有编程语言风格一致。import有很多种用法,比如:

import $ from 'jquery'
import * as _ from '_'
import {a,b,c} from './compontents'
import {a as aa, b as bb, c} from './compontents'

as关键字
有过其他编程经验的同学应该很容易理解,简单的说就是取一个别名。

default关键字
我们在通过export方式导出,在导入时要加{ },export default则不需要,为模块指定默认输出。

//a.js
const a = ['a']
export default a
export const map = ()=>{}
//b.js
import a from './a'

根据上面的经验,所以我们还可以这样;

import a,{map} from './a';

由此可见我们得出的结论是:

遵循规范
require 是 AMD规范引入方式
import是es6的一个语法标准,如果要兼容浏览器的话必须转化成es5的语法
调用时间
require是运行时调用,所以require理论上可以运用在代码的任何地方
import是编译时调用,import命令具有提升效果,会提升到整个模块的头部,最好放在文件开头
本质
require是赋值过程,import是解构过程,在import遇到default的时候,和require完全不同。
require('jquery') 和 import $ from 'jquery'是两种完全不一样的。

猜你喜欢

转载自blog.csdn.net/qqhluckyi/article/details/83214540
今日推荐