Установите переменную с помощью функции стрелки - PullRequest
1 голос
/ 29 апреля 2019

Супер быстрый вопрос, так как я привыкаю к ​​функциям стрелок. Я знаю, что они неявно возвращаются, и что мы можем неявно возвращать, пока это выражение. Однако, например, могу ли я уменьшить следующее $scope.setEdit = () => { $scope.edit = true; } в $scope.setEdit = () => $scope.edit = true; не сталкиваясь с нежелательным поведением? Я не уверен, как ведут себя функции со стрелками, просто назначая переменную. Я использовал только там, где у меня обычно был бы оператор возврата, но не с простым присваиванием.

Это всего лишь пример. Спасибо!

Ответы [ 3 ]

2 голосов
/ 29 апреля 2019

Это имеет мало общего с функциями стрелок, но с оценкой выражений. Независимо от того, что выражение оценивает (с возможными побочными эффектами), будет возвращаемое значение.

Эта функция выражения стрелки:

() => a = b

делает и возвращает так же, как:

() => {
    return a = b;
}

Это функция с побочными эффектами: a получает значение. Назначения могут происходить в выражениях и возвращать назначенное значение. Так что это эквивалентно:

() => {
    a = b;
    return b;
}
2 голосов
/ 29 апреля 2019

Я думаю, что вы неправильно понимаете, как работают функции стрелок.Они только неявно возвращаются, когда вы используете сокращенную версию.

Вот что я имею в виду - эти три функции функционально идентичны, они все возвращают строку 'hello'

function a() { return 'hello' }
const b = () => { return 'hello' }; //arrow Fn /w braces needs a return statement to return anything
const c = () => 'hello';            //shorthand arrow Fn w/o braces returns whatever the arrow points to

Вот демонстрацияэто в действии, используя все различные стили функций

//regular function with no return value
var a = 'bar';
const myFunc1 = function() { a = 'foo'; }
console.log(myFunc1(), a);

//regular function with a return value
a = 'bar';
const myFunc2 = function() { return a = 'foo'; }
console.log(myFunc2(), a);

//arrow function with a return value
a = 'bar';
const myFunc3 = () => { return b = 'foo'; }
console.log(myFunc3(), a);

//arrow function with no return value
a = 'bar';
const myFunc4 = () => { b = 'foo'; }
console.log(myFunc4(), a);

//arrow function using shorthand, which has an implicit return value
a = 'bar';
const myFunc5 = () => b = 'foo';
console.log(myFunc5(), a);
2 голосов
/ 29 апреля 2019

Назначение - это просто выражение, как и любое другое выражение:

  const a = () => b = 1;

  console.log(
    c = 1,
    a()
  );

без каких-либо нежелательных действий?

Зависит от того, ожидает ли вызывающий объект что-либо для возврата. Если нет, возвращенный результат никуда не денется, тогда это не имеет значения.

...