为什么在javascript的if()表达式中使用var是非法的?

Why is it illegal to have var inside an if() expression in javascript?

本文关键字:var 非法 表达式 javascript if 为什么      更新时间:2023-09-26

至少在V8中是这样的

if((var i = x*x) == 2){}

将给出一个关于意外的'var'关键字的错误。然而,如果var发生在if()之前,则没有错误,但我仍然在表达式中留下I的赋值。为什么有这样一个奇怪的例外?这在ECMA脚本标准的某个地方吗?是否有一个不可检测的闭包发生在if()表达式的评估中,所以留在var中会使我的赋值消失?

进一步概括,似乎var前面必须没有非空格字符。

对您的问题的简短回答是,您不能使用变量语句作为表达式来在if中求值。

更详细的答案是,根据ECMA-262 s12.5, if语句的形式为:
if ( Expression) Statement else Statement

ECMA-262 s11将表达式描述为:

PrimaryExpression :
  this
  Identifier
  Literal
  ArrayLiteral
  ObjectLiteral
  ( Expression )

var开头的表达式是variablestatement (ECMA-262 s12.2),它不是上述表达式之一。