在JavaScript中将变量定义为块级作用域。

4

在Swift中,我可以这样定义一个变量:

let foo: String = {
    if bar {
        return "42"
    } else {
        return "43"
    }
}()

我如何在JavaScript中定义一个这样的变量?我知道你可以将变量定义为未定义,并在if块中重新定义它,但在我看来这是一种丑陋的语法,因为“foo”会在Swift示例中重复3次而不是1次:
let foo

if (bar) {
    foo = "42"
} else {
    foo = "43"
}
5个回答

14
如果逻辑够简短,你可以使用条件运算符:
let foo = bar ? "42" : "43"

如果逻辑更加复杂,那么我个人会选择你展示的最后一个例子。但你可以考虑另一种选择,即使用立即调用的函数表达式

let foo = (() => {
  if (bar) {
    return "42"
  } else {
    return "43"
  }
})()

这将创建一个匿名函数,立即调用它,然后将其返回值分配给foo


7

如果你只是根据条件设置值,可以使用三元表达式:

const foo = bar ? '42' : '43'

如果需要更复杂的逻辑,可以使用函数:

let bar = true;
const foo = computeFoo(bar);

function computeFoo(bar) {
  if (bar) {
    return "42";
  }
  return "43";
}

console.log(foo); // 42

或者一个IIFE:

let bar = true;
const foo = (() => {
  if (bar) {
    return "42";
  }
  return "43";
})()

console.log(foo); // 42


1
您可以使用三元运算符:条件(三元)运算符
let variable = true ? "A" : "B"

在您的情况下:
let foo = bar ? '42' : '43'

0

只是为了给答案集添加一点冷颤

const bar = false

let foo = (() => {
  switch(true) {
    case bar:
      return "42"
    default:
      return "43" 
  }
})()

console.log(foo) // 43


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接