简单的说来,表达式(expression)是语句(Statement)的子集,表达式一定会返回一个值,而语句不会。
比如定义变量、返回语句都属于语句,而逻辑判断、方法调用、赋值都属于表达式。
支持语句的地方都支持表达式,而只支持表达式的地方不支持语句。
表达式:
const foo = 'foo'
return foo
语句:
foo = 'foo'
foo > bar
foo()
如果你在仅支持表达式的位置写语句,则会报错,举个例子:
For循环的格式为:
for(
语句,表达式,表达式) {语句
}
如果在仅支持表达式的位置写语句,则会报错:
for(let i = 0; let j = 0; i++) { // Uncaught SyntaxError: Unexpected identifier console.log(i);}以及不包含大括号的箭头函数的格式为:
() =>
表达式
如果写入语句就会报错:
let foo = () => return 'foo'; // Uncaught SyntaxError: Unexpected token 'return'
可以使用IIFE将语句转为表达式:
const foo = (() => { return 'foo';})();注意:单纯使用括号是没办法把语句转化为表达式的:
(let foo = 'foo') // Uncaught SyntaxError: Unexpected identifier



