0

假设我在第 1 行声明了一个空函数:

1: function foo () {} 
2: foo() 

我在第 2 行执行了相同的操作,第 2 行是语句还是表达式,为什么?

4

4 回答 4

2

function foo () {}=> 这是一个函数声明。

foo()=> 您正在调用该函数,这是调用该函数的表达式

于 2018-08-16T18:40:18.413 回答
2

第 2 行是包含(并且完全由)调用表达式的语句。如果您没有在语句末尾省略可选的分号,它可能更容易识别为语句:

/* 1 */ function foo () {} 
/* 2 */ foo();
//           ^

单独的foo()部分是调用表达式,它也可以在允许表达式的不同上下文中使用,例如作为console.login的参数console.log(foo());

于 2018-08-16T19:16:47.823 回答
1

第2 行的代码调用表达式(第 12.3.4 节)

但是,整个第 2 行是一个表达式语句(第 13.5 节)此处执行自动分号插入(第 11.9 节)以将表达式转换为表达式语句。

于 2018-08-16T19:22:24.133 回答
0

函数调用是一个表达式。被调用的函数体中的内容没有区别。实际上,即使定义了函数也没有什么区别(但是如果您在定义函数之前尝试执行调用,则会出错)。

任何表达式也可以用作语句,只需将其单独编写而不是作为其他语句或表达式的一部分。

所以第 2 行既是表达式又是语句。

于 2018-08-16T19:44:23.720 回答