export、export default、import 的注意和require

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 所指向的对象

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值