如何在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"