有没有一种方法可以包含一个;var";在JavaScript需要表达式的地方列出?

有没有一种方法可以包含一个;var";在JavaScript需要表达式的地方列出?,javascript,Javascript,以下代码: console.log((var a=5; ++a)); 不编译,因为var被视为语句,而不是函数。以下内容不适用: console.log((a=5, ++a)); 和预期的单词一样,输出6-但它可以处理外部名称空间。有什么方法可以使第一个代码段正常工作,而不引入闭包,如下图所示 console.log((function(a){return ++a})(5)) 这是针对针对JavaScript的编译器的,因此您的答案必须尊重Requerients。不,如果不引入函数,您就不

以下代码:

console.log((var a=5; ++a));
不编译,因为
var
被视为语句,而不是函数。以下内容不适用:

console.log((a=5, ++a));
和预期的单词一样,输出6-但它可以处理外部名称空间。有什么方法可以使第一个代码段正常工作,而不引入闭包,如下图所示

console.log((function(a){return ++a})(5))

这是针对针对JavaScript的编译器的,因此您的答案必须尊重Requerients。

不,如果不引入函数,您就不能这样做。只需在语句上方声明变量。

,至少从ECMAScript语言规范的5.1版开始,当前的现代浏览器JS基于此

当您执行
console.log(
)时,接下来是一个

它本身包含一个

赋值表达式是:

条件性压力:

LeftHandSideExpression赋值运算符赋值表达式

条件表达式是一种逻辑表达式或三元表达式,出于完整性考虑,我们鼓励您这样做,但它们并没有真正帮助我们(例如,它描述了如何定义
A | | 3
,以及如何定义
A&&6

现在,另一个分支是
ConditionalExpressionNoIn
,它是三元运算符(即,?:,缩写if)。此外,一个简短的调查可以显示我们只运行表达式

另一方面,允许使用函数表达式,但对开始语句没有任何帮助

现在,另一方面,
var
出现在两个地方。在a中,或在类似for explicit的迭代构造中。这两个反过来又不能出现在AssignmentExpression中


因此,正如前面的答案所建议的那样。一个符合规范的JavaScript实现不允许您要求的语法类型。在这个列表中,允许在其内部使用语句的实际上是函数表达式。

关于
console.log(6)
?关于
var a=5;console.log(a++)呢
?如果我可以问的话,什么编译器?ES6解决方案很酷吗?当然,这些示例会输出
5
,而不是
6
@Viclib ungh…为什么编译器会这样做?