假设我在第1行声明了一个空函数:
1: function foo () {}
2: foo()
我在第2行执行了相同的操作, 第2行是语句还是表达式,为什么?
答案 0 :(得分:2)
function foo () {}
=>这是一个函数声明。
foo()
=>您正在调用该函数,这是一个调用该函数的表达式
答案 1 :(得分:2)
第2行是包含(完全由)调用表达式组成的语句。如果您没有在语句末尾遗漏可选的分号,则可能更容易将其识别为一条语句:
/* 1 */ function foo () {}
/* 2 */ foo();
// ^
单独的foo()
是调用表达式,它也可以在允许使用表达式的不同上下文中使用,例如作为console.log
中console.log(foo());
的参数。
答案 2 :(得分:0)
第2行的 code 是Call Expression (Sec 12.3.4)。
但是,第2行的整个是Expression Statement (Sec 13.5)。此处执行Automatic Semicolon Insertion (Sec 11.9),将表达式变成表达式语句。
答案 3 :(得分:0)
函数调用是一个表达式。所调用函数的主体没有什么区别。实际上,即使定义了函数也没有什么区别(但是,如果您在定义函数之前尝试执行调用,则会出现错误)。
任何表达式也可以用作语句,只需单独编写即可,而不是其他某些语句或表达式的一部分。
第2行既是表达式又是语句。