如何在ES2015中编写一个命名的箭头函数?

我有一个函数,我试图转换为ES6中的新的箭头语法。 这是一个命名的function:

function sayHello(name) { console.log(name + ' says hello'); } 

有没有办法给它一个没有var声明的名字:

 var sayHello = (name) => { console.log(name + ' says hello'); } 

显然,我只能在定义它之后才能使用这个函数。 如下所示:

 sayHello = (name) => { console.log(name + ' says hello'); } 

ES6中有没有新的方法呢?

如何在ES2015中编写一个命名的箭头函数?

你按照你排除的方式去做:你把它放在一个赋值或属性初始值设定项的右边,其中variables或属性名称可以合理地用作JavaScript引擎的名字。 没有其他办法可以做,但是这样做是正确的,并且完全由规范覆盖。

根据规范,这个函数有一个真实的名字,说sayHello

 var sayHello = name => { console.log(name + ' says hello'); }; 

这在Assignment Operators> Runtime Semantics:Evaluation中定义,它调用抽象SetFunctionName操作 (该调用当前在步骤1.e.iii中)。

类似地, 运行时语义:PropertyDefinitionEvaluation调用SetFunctionName ,从而给这个函数一个真实的名字:

 let o = { sayHello: name => { console.log(`${name} says hello`); } }; 

现代引擎为这样的语句设置了函数的内部名称; 边缘仍然有一点让它作为运行时标志后面的函数实例上的name

例如,在Chrome或Firefox中,打开Web控制台,然后运行以下代码片段:

 "use strict"; let foo = () => { throw new Error(); }; console.log("foo.name is: " + foo.name); try { foo(); } catch (e) { console.log(e.stack); } 

不。箭头语法是匿名函数的缩写。 匿名函数是匿名的。

命名函数用function关键字定义。

如果用'named',你的意思是你想要设置你的箭头函数的.name属性,那么你很幸运。

如果在赋值expression式的右侧定义了一个箭头函数,则引擎将在左侧使用该名称并使用它来设置箭头函数的.name ,例如

 var sayHello = (name) => { console.log(name + ' says hello'); } sayHello.name //=== 'sayHello' 

话虽如此,你的问题似乎更多了“我可以得到一个箭头function提升?”。 恐怕这个问题的答案是“不”。

看来,这可能与ES7: https ://babeljs.io/blog/2015/06/07/react-on-es6-plus#arrow-functions

给出的例子是:

 class PostInfo extends React.Component { handleOptionsButtonClick = (e) => { this.setState({showOptionsModal: true}); } } 

ES6箭头函数的主体与围绕它们的代码共享相同的词汇,由于ES7属性初始值设定项的作用域方式,我们得到了期望的结果。

请注意,为了得到这个与babel的工作,我需要启用最实验性的ES7阶段0语法。 在我的webpack.config.js文件中,我更新了babel加载器,如下所示:

 {test: /\.js$/, exclude: /node_modules/, loader: 'babel?stage=0'}, 

为了编写命名的箭头函数,你可以在下面的例子中,我有一个名为LoginClass的类,在这个类里我写了一个名为function箭头 ,名为successAuth class LoginClass {

  constructor() { } successAuth = (dataArgs)=> { //named arow function } } 

这是ES6

是的,我想你以后是这样的:

 const foo = (depth) => {console.log("hi i'm Adele")} foo -> // the function itself foo() -> // "hi i'm Adele"