export 暴露有两种形式,一个是声明,一个是直接暴露简写的对象,如下
//第一种:直接声明函数或者变量
export let a = 1;
export let b = 1;
export function sing() { }
//第二种:直接暴露对象
function fun(a, b) {
return a + b
}
let a = 1;
let b = 1;
export { a, b, fun }
两种方式的暴露结果都是一个对象,都是{a:1,b:1},所以导入必须用 {} 接收
import { a, b, fun } from './18.js';
//错误写法
export {a:1,b:1,fun(){} )
使用export default 后面必须是表达式,也就是有返回值的,例如
let a = 1;
export default a
export default { b: 1 }
export default function () { return 1 } //这是函数表达式,不是函数声明
export default 1 > 0 ? 1 : 0
import suibian from '....' //名字随便起,不能加大括号{}
// 错误写法
export default let a = 1;
export default function sing(){}
一个js文件只能有一个export default
总结:export和export default:
相同点:
1、export和export default均可用于导出常量,函数,文件,模块等。
不同点:
1、在一个文件或模块中,export、import可以有多个,但是export default仅有一个。
2、通过export方式导出,在导入时要加{},例如:import {***} from ../../***(路径)。
3、通过 export default 方式导出,导入不加{},例如:import *** from ../../***(路径)。
4、使用export default命令,为模块指定默认输出,这样就不需要知道所要加载模块的变量名。
如何使用:
1、如果只是对外提供一个简单的判断跳转的方法而已,可以使用export function jump(){ }声明一个函数,import { jump }后就可以直接使用jump了;或者使用export default function() {} 暴露一个匿名函数,import jump 就可以直接使用jump了;
2、如果对外提供了很多的方法和属性,直接使用export default { sing( ){ }, data:{ }}
module.exports 和 require
//暴露
const a = 1;
module.exports.a = 1
// 引用
const m1 = require('./06.m1.js') //整个module.exports对象
const { a } = require('./06.m1.js');
console.log(a); // 1
console.log(m1); // {a:1}
const age = 20 //不暴露的话age就是私有的成员
// 向 module.exports 对象上挂载 username 属性 ,就是添加属性
module.exports.username = 'zs'
module.exports.sayHello = function () {
console.log('Hello!')
}
module.exports.age = age;
// 让 module.exports 指向一个全新的对象, 以前添加的那些属性方法都没了,如果下面代码写在前面就都有
module.exports = {
nickname: '小黑'
}
const m = require('./11.自定义模块')
console.log(m) // { nickname: '小黑' }
console.log(exports) // {}
console.log(module.exports) // {}
console.log(exports === module.exports) //true 他们两个一开始都是指向同一个空对象,如果你不去改变其中一个的指向,那么他们两个都是相同的指向
module.exports.username = 111;
module.exports = { //你把module.exports重新指向了
a: 1123
}
exports = { //你把exports重新指向,无所谓,还是以module.exports 指向的对象为准
name: '123'
}
exports.age = 20 //用module.exports和exports都可以,只不过exports更加简单
exports.sayHello = function () {
console.log('大家好!')
}
console.log(exports === module.exports) //改变了指向,地址不同,结果为false
const m = require('./13.exports对象')
console.log(m) //{ a: 1123 }
记住一句话,向外共享的结果,永远都是 module.exports 所指向的对象