我有两个功能:
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不返回任何内容,不是吗?
;
答案 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");