什么是es6胖箭头,等同于es5函数声明

时间:2019-05-31 19:11:22

标签: javascript ecmascript-6

使用ES5,我可以根据我的需要声明函数声明或表达式。

function es5FunctionDeclaration() {
  return 'I am an es5 function declaration';
}

var es5FunctionExpression = function() {
  return 'I am an es5 function expression';
}

使用ES6粗箭头,通常会创建像这样的函数表达式...

const es6FunctionExpression = () => {
  return 'I am an es6 function expression';
}

但是我还没有找到使用粗箭头进行函数声明的方法,也许这是不可能的。

// es6FunctionDeclarationWithFatArrow ??

3 个答案:

答案 0 :(得分:3)

要在ES6中声明函数,您可以通过以下方式实现:

const functionName = () => {};

或者您也可以通过function关键字来实现:

function functionName() {}

而且,如果要创建ES6类,则不会创建函数而是方法:

class MyClass {
  constructor() {}
  method1() {}
  method2() {}
}

答案 1 :(得分:2)

箭头功能的定义在这里:http://www.ecma-international.org/ecma-262/6.0/#sec-arrow-function-definitions

ArrowFunction[In, Yield] :
    ArrowParameters[?Yield] [no LineTerminator here] => ConciseBody[?In]
ArrowParameters[Yield] :
    BindingIdentifier[?Yield] CoverParenthesizedExpressionAndArrowParameterList[?Yield]
ConciseBody[In] :
    [lookahead ≠ { ] AssignmentExpression[?In] { FunctionBody }

这在英语中意味着箭头功能只能像args => {}这样声明。如您所说,您可以使用const func = args => {}将其绑定到变量,也可以将其作为参数传递给另一个函数,但这是不可能的。实际上,将箭头函数作为参数传递是创建它的主要原因之一(因为绑定了this)。参见lexical this(和appendix

正如@MaheerAli所提到的,箭头函数巧妙地避免使用函数hoisting,这可能会令人惊讶。

ES6确实有一些以较短的方式声明函数的方法,例如在对象内:

const obj = {
    func() {
        // ...
    }
}

答案 2 :(得分:0)

首先,提升不是一个好的/有用的现象,并且将函数声明提升为有价值的。甚至两次声明一个变量也不会抛出错误的问题也是由于提升。

ES6旨在消除所有这些问题。因此,没有必要再次添加相同的函数声明作为新功能来再次引起问题。

这与为什么无法在ES6中letconst重新声明或如何像let那样使constvar一样。