我想使用 let
表达式,但以下代码不起作用:
true ? (let x=1, let y=2, x+y) : (let x=3, let y=4, x-y); // SyntaxError
我该怎么做?
最佳答案
不幸的是,Javascript 缺少 lisp 风格的 let
表达式。但是,由于有默认参数和箭头函数,我们可以模仿它们:
const let_ = f => f();
console.log(
true ? let_((x = 1, y = 2) => x + y) : let_((x = 3, y = 4) => x - y) // 3
);
说实话,这有点乏味,而且代码也相当冗长。以下递归用例可能更有说服力:
const let_ = f => f();
const fact = n => let_(
(aux = (n, acc) => n === 1 ? acc : aux(n - 1, acc * n)) => aux(n, 1)
);
console.log(
fact(5) // 120
);
这是否是惯用的 Javascript 值得怀疑,但这是我第一次在代码中使用默认参数。
关于javascript - 如何使用 let 声明作为表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43822109/