Что означает & ldquo; = > & rdquo; (стрелка, образованная из равных & больше чем) в JavaScript?

Я должен был сделать это недавно и получил следующее решение:

while true; do
  wait -n || {
    code="$?"
    ([[ $code = "127" ]] && exit 0 || exit "$code")
    break
  }
done;

Вот как это работает:

wait -n завершается, как только один из ( потенциально много) фоновые задания завершаются. Он всегда оценивает значение true, и цикл продолжается до:

  1. Код выхода 127: последнее фоновое задание успешно завершено. В этом случае мы игнорируем код выхода и выходим из под-оболочки с кодом 0.
  2. Любое из фоновых заданий не удалось. Мы просто выходим из под-оболочки с этим кодом выхода.

С помощью set -e это гарантирует, что сценарий закончится раньше и пройдет через код выхода любого неудачного фонового задания.

402
задан MultiplyByZer0 18 October 2018 в 02:16
поделиться

2 ответа

Как уже говорили другие, это новый синтаксис для создания функций.

Однако, этот тип функций отличается от обычных:

  • Они связывают значение this. Как объяснено в в спецификации ,

    Функция ArrowFunction не определяет локальные привязки для arguments, super, this или new.target. Любая ссылка на arguments, super, this или new.target в ArrowFunction должна разрешать привязку в лексической среде. Обычно это будет функциональная среда непосредственно включающей функции.

    Даже если ArrowFunction может содержать ссылки на super, функциональный объект, созданный на шаге 4, не превращается в метод при выполнении MakeMethod . ArrowFunction , которая ссылается на super, всегда содержится в не ArrowFunction , а необходимое состояние для реализации super доступно через область , которая захвачена функциональным объектом функции ArrowFunction .

  • Они не являются конструкторами.

    Это означает, что они не имеют [[Construct]] внутреннего метода и, следовательно, не могут быть созданы, например,

    var f = a => a;
    f(123);  // 123
    new f(); // TypeError: f is not a constructor
    
13
ответ дан Oriol 18 October 2018 в 02:16
поделиться

Как другие заявили, регулярное (традиционное) использование функций this от объекта, который вызвал функцию, (например, кнопка, которая была нажата) . Вместо этого стрелка функционирует использование this от объекта, который определяет функцию.

Рассматривают две почти идентичных функции:

regular = function() {
  ' Identical Part Here;
}


arrow = () => {
  ' Identical Part Here;
}

отрывок ниже демонстрирует принципиальное различие между тем, что this представляет для каждой функции. выводы регулярной функции [object HTMLButtonElement], тогда как функция стрелки выводы [object Window].

<html>
 <button id="btn1">Regular: `this` comes from "this button"</button>
 <br><br>
 <button id="btn2">Arrow: `this` comes from object that defines the function</button>
 <p id="res"/>

 <script>
  regular = function() {
    document.getElementById("res").innerHTML = this;
  }

  arrow = () => {
    document.getElementById("res").innerHTML = this;
  }

  document.getElementById("btn1").addEventListener("click", regular);
  document.getElementById("btn2").addEventListener("click", arrow);
 </script>
</html>
0
ответ дан 22 November 2019 в 23:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: