что такое жирная стрелка es6, эквивалентная объявлению функции es5 - PullRequest
5 голосов
/ 31 мая 2019

С 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 ]

3 голосов
/ 31 мая 2019

Чтобы объявить функции в ES6, вы можете сделать это через:

const functionName = () => {};

Или вы можете сделать это с помощью ключевого слова function:

function functionName() {}

И, если вы создаете классы ES6, вы создаете не функции, а методы:

class MyClass {
  constructor() {}
  method1() {}
  method2() {}
}
2 голосов
/ 31 мая 2019

Определение функции стрелки здесь: http://www.ecma -international.org / ecma-262 / 6.0 / # sec-arrow-function-определений

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).См. лексический this приложение )

Как уже упоминалось @MaheerAli, функции стрелок аккуратно избегают функции подъема , что может вызывать удивление.

В ES6 есть несколько способов объявить функции более коротким способом, например, внутри объектов:

const obj = {
    func() {
        // ...
    }
}
0 голосов
/ 31 мая 2019

Прежде всего, подъем не является хорошим / полезным явлением, а объявления функций связаны со значением.Проблема не выдачи ошибки даже при объявлении переменной дважды также связана с подъемом.

ES6 был разработан для устранения всех этих проблем.Таким образом, не было смысла снова добавлять то же объявление функции в качестве новой функции, чтобы снова вызывать проблемы.

То же самое, почему в ES6 let и const нельзя переопределить или как мыможет сделать let и const как var

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...