Почему внутренние функции вызываются перед внешними функциями? - PullRequest
0 голосов
/ 26 сентября 2018

В приведенном ниже примере кода вывод будет 3 2 1.Почему не 1 2 3?Разве символ открывающей скобки ( в вызове a1( не означает, что эта функция должна быть вызвана первой?И все вещи внутри скобок, то есть a2(a3(50)) должны идти как number параметр к function a1?

function a1(number) {
  console.log("1");
  return number;
}

function a2(number) {
  console.log("2");
  return number;
}

function a3(number) {
  console.log("3");
  return number;
}

a1(a2(a3(50)));

Ответы [ 3 ]

0 голосов
/ 26 сентября 2018

Итак, в основном вы сделали, что передали вывод одной функции в качестве аргумента другой функции.

Чтобы передать значение, возвращаемое a3, оно должно быть выполнено первым.Следовательно, вы получаете 3 2 1 в качестве вывода.

0 голосов
/ 26 сентября 2018

Да, ( в a1() означает, что это нужно назвать.И самое первое, что он делает - это оценивает передаваемый параметр. В этом случае передается вызов функции, то есть функция со своим собственным набором ().

Это означает, чтоa1 нужно дождаться оценки a2, чтобы он мог передать возвращаемое значение из вызова a2 в a1 в качестве параметра.То же самое касается a2 принятия a3 в качестве параметра.

В следующем коде псевдо вы можете увидеть:

function a1(number) {
  return number;
}

Если вы называете это так:

a1(2+3) // you can't just run a1(2)

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

Редактировать: добавив это ниже, потому что это было в комментариях и ответ, который искал OP.

Первый вызов функции фактически начинаетсяновый контекст выполнения, и эта функция переходит на вершину «стека вызовов», но первое, что делает функция, это оценивает аргумент.Если этот аргумент является функцией, он запускает свой собственный контекст выполнения и перемещается в верхнюю часть «стека вызовов» и так далее.А так как стеки работают по принципу «первым пришел - первым вышел», самый последний из них должен оцениваться первым.

0 голосов
/ 26 сентября 2018

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

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