почему вывод 1 2 3 13, что за логика c позади? - PullRequest
0 голосов
/ 30 января 2020

Какой будет выход? может кто-нибудь объяснить вывод. Может кто-нибудь объяснить, как функции вызываются?

var x = 0;

function hn() {
  x++;
  console.log(x);

  return (function hn() {

    x += 10;

    console.log(x);
  })
}

hn(hn())(hn());

1 Ответ

0 голосов
/ 30 января 2020

Порядок оценки можно показать, добавив сообщение.

  1. hn("A") оценивается, печатает «A: 1» и возвращает функцию (назовем ее F1), которая увеличивает значение x на 10 и отображает его значение.

  2. hn(F1). Он увеличивает x и печатает: "function hn (msg2) {

    x + = 10;

    console.log (msg2 +": "+ x);}: 2" => здесь сообщение - это функция F1 (немного странно, хорошо). Обратите внимание, что F1 не вызывается, используется только его строковое представление. Он возвращает функцию (назовем ее F2), которая увеличивает x на 10 и отображает его значение.

  3. hn("B") оценивается, печатает «B: 3» и возвращает функцию (назовем ее F3), которая увеличивает x на 10 и отображает его значение.

  4. F2(F3) оценивается, увеличивает x на 10 и печатает «function hn (msg2) {

    x + = 10;

    console.log (msg2 +» : "+ x);}: 13" => здесь сообщение является функцией F3 (немного странно, хорошо) Обратите внимание, что F3 не вызывается, используется только его строковое представление. Он возвращает функцию (назовем ее F4), которая увеличивает x на 10 и отображает его значение.

Обратите внимание, что некоторые функции создаются, но никогда не вызывают (F1, F3, F5).

var x = 0;

function hn(msg) {
  x++;
  console.log(msg + ": "+ x);

  return (function hn(msg2) {

    x += 10;

    console.log(msg2 + ": "+ x);
  })
}

hn(hn("A"))(hn("B"));
...