【发布时间】:2021-01-10 20:44:45
【问题描述】:
澄清一下:
这纯粹是为了实验目的,学习一种新的(对我而言)语言的怪癖、奇点和结局。如果我要与其他人共享此代码,我当然会写出可读性。 :-)
我有一个函数someFunction(x),还有两个全局变量:
let m = 2;
let e = 5;
在函数内部,我想检查x == m。如果这是真的,我想将m 传递给辅助函数调用(sideFunction(m)),然后将x 重新分配给e 以完成someFunction。
这确实按预期工作:
const someFunction = x => {
if (x == m) {
sideFunction(m);
x = e;
}
doOtherStuffWith(x);
}
但是,我想缩短它,最好是一行。这也是为了更多地了解三元和/或布尔链。
这两种方法我都试过了:
// Boolean chaining
const someFunction = x => {
x == m && sideFunction(m) && (function () {x = e})();
doOtherStuffWith(x);
}
这不 起作用,大概是因为赋值x = e 仅适用于内部匿名函数的本地范围内的x...?
// Ternary operator
const someFunction = x => {
x = (x == m && sideFunction(m)) ? e : x;
doOtherStuffWith(x);
}
这不工作,大概是因为sideFunction(m)实际上并没有被调用,出于某种原因...?
如何解决这些问题以使其正常工作?
或者,是否有其他优雅的方法可以在没有完整的多行 if 块的情况下执行此检查/调用/重新分配?
非常感谢!
【问题讨论】:
-
sideFunction返回什么?看起来像一个 void 函数,在这种情况下,它将评估为false... -
"这不起作用,大概是因为赋值 x = e 只适用于内部匿名函数的局部范围内的 x...?" 或者大概是因为
someFunction返回一个虚假值。可能是undefined(如果它没有明确的return)。我看不出有什么必要缩短它。你试着看看它给你带来了什么——你在这个问题上花了多少时间和打字?它是否弥补了您可能保存的几个字符? -
保持简短:不要写这一行。
-
@fredrik 哇,我什至没有想到这一点。谢谢!
-
@VLAZ 我正在尝试学习该语言的工作原理。我永远不会在生产环境中这样写。 :-) 还是谢谢你!
标签: javascript conditional-operator boolean-expression