在JavaScript中使用分号执行函数

时间:2019-03-26 13:46:21

标签: javascript compilation

我有两个功能:

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 :(得分:0)

分号与执行没有任何关系,它只是标记语句的结尾。括号()确实是调用执行的东西。

因此,const c = functionB(functionA(););会引发错误,因为JS认为您在第一个分号之后(而该行之前的语句是不完整/无效的)在新行上仅添加);语法)。

但是,如果删除该分号...

const c = functionB(functionA());

...您有一些完全有效的(并且很常见)。这将首先执行functionA,并将其返回值作为参数传递给functionB

这有助于您理解吗?

答案 1 :(得分:0)

functionA()的结果传递给functionB时,会将functionA()的结果视为表达式。因为它是一个表达式(有值的东西,在这种情况下为30),而不是语句(执行某条指令),所以您不必在其后加上分号。这有道理吗?

我不确定您要问的第二个问题。如果您尝试使用空行代码,则可以通过在该行上不编写任何内容来编写代码。我相信;实际上是合法的JavaScript声明,具体内容如下:https://docstore.mik.ua/orelly/webprog/jscript/ch06_19.htm

答案 2 :(得分:0)

要回答第一个问题:

在语句的末尾使用分号。可以将语句视为将由程序执行/执行的动作或指令。分号标志着该指令的结束。因此,当您在语句中间(即未完成语句)中使用分号时,您会在技术上尽早结束指令,因此会出现语法错误:

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

要回答第二个问题:

当一个函数不返回任何东西时,它实际上隐式返回undefined:

function functionA() {

}

console.log(functionA());

所以没有:

;

就您自己而言,您会遇到类似这样的情况:

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