Выполнение функции с запятой в JavaScript

#javascript #compilation

#javascript #Сборник

Вопрос:

У меня есть две функции:

 const functionA = function() {
   return 30;
}

const functionB = function(num) {
   return num*2;
}

const c = functionB(functionA());
  

Я знаю, что это очень просто, но почему мы не можем написать код таким образом:

 const c = functionB(functionA(););    // with an semicolon in the inner braces
  

Разве эта внутренняя функция тоже не выполняется?

У меня есть другая функция:

 const functionAnother = function() {
   //does nothing
}
  

Мы знаем, что недопустимо иметь пустую строку выполнения точно так же, как:

 ; 
  

но мы можем написать код, подобный:

 functionAnother();
  

и поскольку functionAnother ничего не возвращает, разве это не так:

 ;  
  

Комментарии:

1. ; является концом инструкции, functionB(functionA();); должно быть похоже на functionB(functionA(); и );

Ответ №1:

Точка с запятой не имеет никакого отношения к выполнению, она просто отмечает конец инструкции. Скобки () — это действительно то, что вызывает выполнение.

итак, const c = functionB(functionA();); выдает ошибку, потому что JS думает, что вы начинаете новую строку, не указав ничего, кроме ); после первой точки с запятой (а оператор в строке перед ним имеет неполный / недопустимый синтаксис).

Однако, если вы удалите эту точку с запятой…

const c = functionB(functionA());

…у вас есть что-то совершенно верное (и распространенное). Это будет выполнено functionA первым и передаст его возвращаемое значение в качестве параметра functionB .

Помогает ли это вашему пониманию?

Ответ №2:

Когда вы передаете результат functionA() в functionB , вы обрабатываете результат functionA() как выражение. Поскольку это выражение (нечто, имеющее значение, в данном случае 30), а не оператор (инструкция что-либо сделать), вы бы не ставили точку с запятой после него. Имеет ли это смысл?

Я не уверен, что задает ваш второй вопрос. Если вы пытаетесь получить пустую строку кода, вы можете создать ее, ничего не записывая в этой строке. Я считаю, что ; на самом деле это законный оператор JavaScript, который отображается на этой странице: https://docstore.mik.ua/orelly/webprog/jscript/ch06_19.htm

Ответ №3:

Чтобы ответить на ваш первый вопрос:

Точки с запятой используются в конце инструкций. Оператор можно рассматривать как действие или инструкцию, которая будет выполнена программой. Точка с запятой обозначает конец этой инструкции. Таким образом, когда вы используете точку с запятой в середине инструкции (т. Е. Когда она не завершена), вы технически завершаете свою инструкцию раньше, и, следовательно, вы получите синтаксическую ошибку:

 function functionA() {};
function functionB() {};
const c = functionB(functionA(););  

Чтобы ответить на ваш второй вопрос:

Когда функция ничего не возвращает, она фактически неявно возвращает undefined:

 function functionA() {

}

console.log(functionA());  

И поэтому вместо того, чтобы иметь:

 ;
  

Само по себе получается что-то вроде так:

 console.log("foo");
undefined;
console.log("bar");