为什么 `export default const ` 无效?

两种 export 方式

export default const a = 1

const a = 1
export default a

为什么前者这样无效,而后者却可以?

该问题与 stackoverflow 上的一个问题类似。但是因为水平原因,没有理解。

追加问题:

export {
    a: 1,
}

为什么这样又不可以?

阅读 22.6k
6 个回答

stackoverflow 上说了,const/let是ES6关键字,如果default后跟const之类的关键字是不符合的,

ES6规范中标记出了default后面能带的参数

export {
    a: 1,
}

export命令输出的是接口,可以动态的获取模块内部的值,具体可以来说可以是变量,函数或class的,但是你上面那种方式直接导出一个确切的对象,换成下面这中方式是可以的,因为其他模块引入这个文件,使用这个接口获取到a的值是动态的

var a=1;
export {
    a
}

默认导出不需要形参, 只要实参就行了

babel playground转化后的代码
image.png

module文件导出的实际上是exports对象
export 后需要一个key将val绑定在exports对象上, 因此用一个声明语句得到key和val

expord default 已经指定了key为default, 所以后面只能跟一个值表达式

同理一下 export default都是合法且等效的

export default 42

export default n = 42

export default +function(){ return 42 }()
新手上路,请多包涵

原问题:
这是js语法规定,default是一个导出的名字,如果使用import * as all from ...export default导入的变量就是all.defualt
可以这样理解:不能在定义变量的时候又把他当作defalut导出


新增的问题:

export {
    a: 1,
}

普通的export需要一个名字,你导出匿名对象是不行的,不然你在import {xxx} from...里面xxx写什么名字呢

export default {
    a: 1,
}

默认导出匿名对象是可以的,你导入的时候可以给任意命名,像这样import anyName from...

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题