Синтаксис стрелки JavaScript: что означает знак равенства в правой части? - PullRequest
0 голосов
/ 05 мая 2018

Я изучаю синтаксис JavaScript. Иногда я вижу схему, которая меня смущает: знак равенства на правой стороне стрелки. Например, что-то вроде этого:

.then(data => myVariable = data)

Я не знаю, что происходит в этом синтаксисе. Похоже, что он принимает значение data и присваивает его переменной с именем myVariable. Может кто-нибудь объяснить это?

Ответы [ 2 ]

0 голосов
/ 05 мая 2018
This is called fat arrow function in ES 6 . It is used for many purposes like
1.Arguments
If we want to pass and argument to a function.
Old Syntax :
let sum = function(x,y){ 
                return x+y;
          }
New Syntax with fat arrow 
let sum = (x,y) => x+y; 

//ES5
var setNameIdsEs5 = function setNameIds(id, name) {
  return {
    id: id,
    name: name
  };
};

// ES6
var setNameIdsEs6 = (id, name) => ({ id: id, name: name });
console.log(setNameIdsEs6 (4, "Kyle"));   // Object {id: 4, name: "Kyle"}

Note : Return statement is not required in fat arrow of it is only one line .

2. Anonymous Function.

// ES5
API.prototype.get = function(resource) {
  var self = this;
  return new Promise(function(resolve, reject) {
    http.get(self.uri + resource, function(data) {
      resolve(data);
    });
  });
};
Using an arrow function, the same result can be achieved more concisely and clearly:

// ES6
API.prototype.get = function(resource) {
  return new Promise((resolve, reject) => {
    http.get(this.uri + resource, function(data) {
      resolve(data);
    });
  });
};
0 голосов
/ 05 мая 2018

Ты прав. Это функция со стрелкой (без сопровождающего блока), которая «возвращает» выражение присваивания - фактически выполняет присваивание значения data для myVariable и возвращает правую часть, хотя в этом случае это может не использоваться. .

В более упрощенном случае:

let foo = 3;
function foobar(callback) {
  const result = callback(5); //call callback with 5 as argument
  console.log(result); //5
}
foobar(five => foo = five); //assigns 5 to foo
console.log(foo); //5

Это обычно не самый читаемый вариант, и ваш вопрос это подтверждает. Я бы порекомендовал добавить такой блок (если вы не собираетесь возвращать правое значение):

myPromise.then(data => {
  myVariable = data;
});

В этом случае нет неявного возврата правой части выражения присваивания, что делает намерение более ясным. Кроме того, назначения, такие как то, что вы делаете правильно с тем, что я предполагаю для асинхронного обещания, не приветствуются.

Возможно, обратите внимание на async / await или другие новые функции ES, чтобы иметь дело с асинхронным кодом, отличным от использования переменных, которые могут привести к некоторым проблемам, если не используются правильно .

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