ES6块作用域变量定义作为条件

时间:2016-01-17 21:33:11

标签: javascript variables ecmascript-6

在C ++中你可以做到

if (MyClass* obj = MyClass::getInstance()) { ... }

在JavaScript中,只有函数范围的变量,所以后面的语句没有意义

if (var x = getTrueOrFalseValue()) { ... }

但ES6引入了letconst个关键字,它们声明变量只能在块范围内访问。为什么你不允许在if / while条件下使用它?例如:

if (let x = getTrueOrFalseValue()) { ... }

我发现这很酷,因为它不会破坏未使用变量的函数范围,并且只允许在if / while块范围内使用它们。

2 个答案:

答案 0 :(得分:2)

我认为这是不可能的,因为let只能用作语句,而不能用作表达式。如果你试试(让f = 3);你也会收到错误。

答案 1 :(得分:0)

这是最接近的,这里

function getTrueOrFalseValue() {
  return true
}

if (!(x = void 0)) {
  let x = getTrueOrFalseValue();
  if (x) {
    console.log(x)
  }
}
function getTrueOrFalseValue() {
  return true
}
if (!(this["x"]) || !(x)) {
  let x = getTrueOrFalseValue();
  if (x) {
    console.log(x)
  }
}