最近在看dva的源码时,注意到dynamic.js文件中动态注入model时,用的是model.default||model。源代码如下:
ret.slice(0, len).forEach((m) => {
m = m.default || m;
if (!Array.isArray(m)) {
m = [m];
}
m.map(_ => registerModel(app, _));
});
复制代码
这种写法跟文件引入方式有关,文件的引入方式分为require和import;
import的引入方式有提升的效果,会将引入的模块提升到整个模块的头部,首先执行。(是在编译阶段执行的) 当一个文件在使用export导出时,可能会存在导出多个变量的情况 例如a.js
var obj = {a:1};
export const b = 2;
export default obj;
复制代码
当在另外一个文件b.js引入a.js的时候使用require的方式时 var a = require './a.js'
此时引入的这个模块中,此时 a = {default:obj,b:2}, 得到的对象是整个对象。
使用import的方式时 在es6中 import a from './a.js' 的本意是想去引入一个 es6 模块中的 default 输出。所以此时的a=obj; import a, { b } from './a.js
所以当我们在一个文件中导出多个变量时,在使用导出变量时最好使用*.defual||*
这样的方式。