#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");