繁体   English   中英

在JavaScript中使用分号执行函数

[英]Execute function with semicolon in 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

那个内部函数A也没有执行吗?

我有另一个功能:

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

我们知道有一条空行执行是违法的,就像:

; 

但我们可以编写如下代码:

functionAnother();

因为functionAnother什么都不返回,不是这样的:

;  

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

所以, const c = functionB(functionA();); 抛出一个错误,因为JS认为你开始新的一行除了); 在它之后的第一个分号(以及它之前的语句是不完整/无效的语法)。

但是,如果你删除那个分号......

const c = functionB(functionA());

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

这有助于您理解吗?

functionA()的结果传递给functionB ,将functionA()的结果视为表达式。 因为它是一个表达式(某些东西,它有一个值,在这种情况下是30)而不是一个语句(一个做某事的指令),你不会在它后面加一个分号。 那有意义吗?

我不确定你的第二个问题是什么。 如果你想要一个空行代码,你可以通过不在该行上写任何东西来制作代码。 我相信; 实际上是一个合法的JavaScript声明,请通过此页面访问: https//docstore.mik.ua/orelly/webprog/jscript/ch06_19.htm

回答你的第一个问题:

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

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

回答你的第二个问题:

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

 function functionA() { } console.log(functionA()); 

因此,而不是:

;

就其本身而言,你有这样的事情:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM