Выполнить функцию с точкой с запятой в JavaScript - PullRequest
0 голосов
/ 26 марта 2019

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

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

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

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

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

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

; 

но мы можем написать код вроде:

functionAnother();

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

;  

Ответы [ 3 ]

0 голосов
/ 26 марта 2019

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

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

0 голосов
/ 26 марта 2019

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

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

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

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

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

function functionA() {

}

console.log(functionA());

И так вместо:

;

Само собой, у вас есть что-то вроде этого:

console.log("foo");
undefined;
console.log("bar");
0 голосов
/ 26 марта 2019

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

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

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

const c = functionB(functionA());

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

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

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