使用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 ??
答案 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中let
和const
重新声明或如何像let
那样使const
和var
一样。