ES6/7中是否可以导出箭头函数?

177

下面的导出语句存在语法错误。

export default const hello = () => console.log("say hello")

为什么?

我只能导出命名函数。

export function hello() {
  console.log("hello")
}

原因是什么?


4
这个错误信息实际上是什么? - Andy
2
这里可以正常工作:http://astexplorer.net/#/0fv5UXttsP。 - Felix Kling
你字面上的问题的答案是:是的export 完全不关心你想要导出的值。 - Felix Kling
1
什么是语法错误? - omarjmh
3
不能为默认导出命名。 - Felix Kling
显示剩余6条评论
3个回答

274
是的。export不关心你要导出的值是什么。

以下导出语句为什么会出现语法错误?

你不能同时为一个默认导出定义一个名称("default"已经是导出的名称了)。

可以这样做:

export default () => console.log("say hello");
或者
const hello = () => console.log("say hello");
export default hello;

4
以下代码如何工作,然后导出默认的 hello = () => { console.log("为什么被踩")} - jozzy
4
x = y 是一个赋值表达式,其结果为 y 的值。它不是变量声明语句。你可以在任何可以放置表达式的地方使用 x = y。请注意:如果 x 没有在之前定义,则在严格模式下会抛出错误。 - Felix Kling
3
常规的导出怎么样?是否可以像这样做:export () => {/*body*/} as getUsers;?还是必须先定义它,然后再导出? - Tomasz Mularczyk
52
@Tomasz: export const getUser = () => {...}; 翻译为中文:@Tomasz:导出常量getUser=()=> {...}; - Felix Kling
3
只要函数在使用上达到了预期的效果,它是如何创建的就不重要了。 - Felix Kling
显示剩余5条评论

51

如果您不想使用默认导出,可以使用以下语法导出带有名称的函数:

export const yourFunctionName = () => console.log("say hello");

所以你将 export function yourFunctionName () { 替换为 export const yourFunctionName = () => 。字符长度相同,但在这个 = () => 部分很容易出现拼写错误。老实说,对我来说它感觉不那么易读,而且需要更多的工作 :) - user670839
箭头函数与普通函数在分配this值的方式上有所不同。https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Functions/Arrow_functions - Eneko
为什么我们需要在这里使用const? - rahul Kushwaha
@rahulKushwaha const 用于声明变量,就像 let 一样,但是你不能在之后更改它。在旧版 JS 中,它曾经是 var。而 export 则使其在文件外可用。 - Raphael Pinel
那么,导出只能使用 cont 变量吗? - rahul Kushwaha
@rahulKushwaha 它应该也可以与 let 一起使用,但这很少用到。但是仅使用 export 而没有任何变量声明关键字(如 constlet)是行不通的。 - Raphael Pinel

1

试试这个

导出默认值 () => console.log("说你好");

或者

导出常量 hello = () => console.log("说你好")


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接